Read it later.

Web製作に関するサーバ構成やコーディングネタの備忘録として使ってます。

*

apacheを使ったWebサーバ経由でのファイルのダウンロードが非常に遅い場合の対処

   

http経由でのファイルのダウンロード、しかも静的ファイル。こんなに遅かったっけ?

タイミングによっては、たった30MBのファイルのダウンロードが、10時間。
ってありえない。しかもそのサーバはファイルアップローダとして使っているサーバだからさぁどうしよう。

サーバを囲む他の端末でネットワークのトラフィックが激しいのかとも思って調査したのですが、ftpやwinscpで同じファイルをダウンロードしたところ、普通にダウンロードができてしまいます。またサーバ内部から外部にPINGを打っても、速度に異常なし。

# apachectl -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jul 24 2015 11:52:28

apacheのバージョンも古いわけではない。

数週間悩んだあげく、やっと謎が解けました!

救ってくれたのは、この2つのブログ。助かりました、ありがとうございます!

apacheサーバからの送信速度がやたら低くなる問題 – ヒマは見つけるモノじゃない、つくるモノだ
Proxyとか :: Apache高速化 EnableMMAP Off EnableSendfile off で転送速度アップ

結論としては、下記の2つのパラメタがデフォルトでOnになっているのだけど、それが阻害ダウンロード速度を遅くすることもあるのということ。

# http://www.itc.yorku.ca/manual/ja/mod/core.html#enablemmap
# このディレクティブは配送中にファイルの内容を読み込む必要があるときに httpd がメモリマッピングを使うかどうかを制御します。デフォルトでは、 例えば、mod_include を使って SSI ファイルを配送 するときのように、ファイルの途中のデータをアクセスする必要があるときには Apache は OS がサポートしていればファイルをメモリにマップします。
# このメモリマップは性能の向上を持たらすことがあります。 しかし、環境によっては運用上の問題を防ぐためにメモリマッピングを 使用しないようにした方が良い場合もあります:
#   マルチプロセッサシステムの中にはメモリマッピングをすると httpd の 性能が落ちるものがあります。
#   NFS マウントされた DocumentRoot では、httpd がメモリマップしている間にファイルが削除されたり 短くなったりしたときに起こるセグメンテーションフォールトのために httpd がクラッシュする可能性があります。
# これらの問題に当てはまるサーバの設定の場合は、以下のようにして ファイルの配送時のメモリマッピングを使用不可にしてください:

EnableMMAP Off

# http://www.itc.yorku.ca/manual/ja/mod/core.html#enablesendfile
# このディレクティブはクライアンにファイルの内容を送るときに httpd がカーネルの sendfile サポートを使うかどうかを制御します。デフォルトでは、 例えば静的なファイルの配送のように、リクエストの処理にファイルの 途中のデータのアクセスを必要としないときには、Apache は OS が サポートしていればファイルを読み込むことなく sendfile を使って ファイルの内容を送ります。
# sendfile は read と send を別々に行なうことと、バッファの割り当てを 回避します。しかし、プラットフォームやファイルシステムの中には 運用上の問題を避けるためにこの機能を使用不可にした方が良い場合があります:
#   プラットフォームの中にはビルドシステムが検知できなかった、壊れた sendfile のサポートが存在するものがあります。これは特に バイナリが別のマシンでビルドされ、壊れた sendfile のあるマシンに 移動したときに起こります。
#   Linux では、sendfile を用いると、 IPv6 使用時に存在する特定ネットワークカードの TCP-checksum オフロードのバグを踏んでしまいます。
#   ネットワークマウントされた DocumentRoot (例えば NFS や SMB) では、カーネルは自身のキャッシュを使ってネットワークからのファイルを 送ることができないことがあります。
# これらの問題に当てはまるサーバの設定の場合は、以下のようにして この機能を使用不可にしてください:

EnableSendfile Off

このような感じで、明示的にOffにしてサービスを立ち上げ直したら、解決しました。
EnableSendfileは、直接的には影響はないのだけど、IPv6使用時にバグを踏むかもって書いてるので、敢えてOffにしました。
MySQLもそうだけど、時折マニュアルをみて、どういうパラメタが追加されたのか、どういう機能が変わったのか、精読する必要があるのだなと、痛感。

 - CentOS

  関連記事

centos
ログイン履歴の確認

ログイン履歴の照会をするには、「last」コマンドを用いる。 ログイン日時の降順 …

centos
シンボリックリンクの作成

やっと、本日勘違いしていたことに気づきました(汗 思い込みはあかんねー。 ※[シ …

centos
ext2でのサブディレクトリの配置上限数

やってきたメールをローカルに、サブディレクトリを作成して保存していたら、どう考え …

centos
logrotate

■logrotateを直接実行 ■参考URL Stray Penguin &#8 …

centos
CentOS系コマンド覚書

※自分がよく使うもので忘れやすいものを書いてるだけなので、これといってすごいもの …

centos
[CentOS]yumが失敗する(db3 エラー) – Thread died in Berkeley DB library

yumが実行できなくなった! yumコマンドがうまく動かない環境に遭遇した。 解 …

centos
root宛メールを転送

logwatchなど、root宛にやってきたメールを指定のメルアドに転送するには …

centos
リッスン状態にあるポートについて調査する。

下記は、出力結果のサンプル。

centos
qmailの転送設定

正確にはvpopmail用の設定らしい。 ○○○-△△△@hogehoge.co …

centos
開いているポートを調べる(nmap)

開いているポートを調べる(nmap) 外部公開しているポートを調べる方法はいくつ …