web-dev-qa-db-ja.com

ローカルネットワーク上でもLinux / Apacheのパフォーマンスが非常に遅い

ApacheとMYSQLを実行しているUbuntuサーバーマシンがあります。システムとバージョンの情報は次のとおりです。Linuxカーネル3.0.0.-12Apache/2.2.20 MySQL Ver 14.14.Distrib 5.1.58

私はこのサーバーでいくつかのWebサイトを実行しています。一部はHTMLのみ、一部はPHP/MySQLです。 [問題は、静的サイトと動的サイトの両方で応答時間が非常に遅いことです。応答が返されるまでに10秒以上かかる場合があります。これにより、サイトが非常に遅くなり、ほとんど使用できなくなります。
ローカルネットワークからリクエストした場合でも問題が発生します。関連するサブドメインを/ etc/hostsファイルに追加しましたが、URLの代わりにIP番号を使用しても、すべての問題が解決されるわけではありません。したがって、DNSルックアップの問題はありません。
応答時間を表示してログ形式を変更しましたが、ファイルが提供されるまでに12秒かかる場合があります。スクリーンショットの例のjquery〜.jsファイルを参照してください。
この非常に長い応答時間の説明はありませんが、ここでの問題はそれだけではありません。他のファイルも提供に時間がかかりますが、ログファイルに長い応答時間が表示されません。 。
したがって、おそらくここにはさまざまな組織が関与しています。私は今まで解決策を見つけることができません、何か提案はありますか?事前にTHanx、Klaas

アクセスログファイルからのスクリーンショット画像へのリンク

いくつかの追加の構成情報:

Apache2.conf(コメントは削除されました)

LockFile ${Apache_LOCK_DIR}/accept.lock
PidFile ${Apache_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

User ${Apache_RUN_USER}
Group ${Apache_RUN_GROUP}

AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

DefaultType text/plain
HostnameLookups Off

ErrorLog ${Apache_LOG_DIR}/error.log
LogLevel warn

Include mods-enabled/*.load
Include mods-enabled/*.conf
Include httpd.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %T/%D" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Include conf.d/
Include sites-enabled/

そして、遅いサイトの1つの仮想hostfileは、実際には非常に単純です...

<VirtualHost *:80>
    ServerAdmin [email protected]
        ServerSignature EMail
        ServerName toenjoy.drsklaus.nl
    DocumentRoot /var/www/toenjoy.drsklaus.nl
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/toenjoy.drsklaus.nl/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride AuthConfig
                AuthType Basic
                AuthName "To Enjoy"
                AuthUserFile /etc/.htpasswd
                Require user petraaa
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/Apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog /var/log/Apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

そして、free -mの出力:

klaas@ubuntu-server:/etc/Apache2$ free -m
             total       used       free     shared    buffers     cached
Mem:          1997       1401        595          0        144       1017
-/+ buffers/cache:        238       1758
Swap:         2035          0       2035

そして、サイトが遅い瞬間にスワッピングが発生するという兆候はありません。 topを実行しましたが、CPUの問題ではないようです。 Apacheスレッドの生成がボトルネックになる可能性があるという印象がありますが、これは単なる提案です。多分これはいくつかの追加情報を提供します!

編集:問題はしばらくの間なくなったように見えましたが、再び発生します!また、Apacheだけでなく、SSHを使用した接続にも非常に時間がかかり、キーフレーズが要求されるまでに最大15秒かかる場合があります。また、scpの動作は非常に遅くなります。この振る舞いは本当に前例のないものであり、サーバーを非常に使いにくくします。何か案は...?

3
klausch

Apacheは複雑な獣であり、ここで問題になる可能性があります...またはそうでない可能性があります。そのダークホールに到達する前に、一般的なネットワークの速度低下のデバッグを開始します。具体的には:

  • ポートでnetcatをサーバーモードで実行し、ローカルファイルの内容を配布するように構成してから、マシン自体から接続してみてください。例えば:

    本当ですが; do nc -l 80 <index.html;完了

これにより、Apache、物理ネットワーク、およびDNSまたはIPリンクの問題が解消されます。提供されるファイルはローカルであることに注意してください。たとえば、NFSマウントはありません。

  • 再び同じですが、同じサブネットからローカルネットワーク経由で接続します
  • 繰り返しますが、別のサブネットから

ここまで到達すれば、サーバーは良好であり、ネットワークルーティングも問題ありません。

次に、DNSをクリーンアップし、逆引き参照が機能することを確認します。たとえば、4.3.2.1.in-addr.arpaを掘って、1.2.3.4アドレスのルックアップをテストします。遅い場合は問題です。/etc/resolv.confやdnsmasqなどを使って麺を作る必要があります。これがしっかりするまで先に進まないでください。この時点でもSSH/SCPをボックスに試す価値があります-それは速いはずです。

次に、Apache。ここまで進んだら、ネットワークが良好で、DNSが機能し、ボックスに問題がないことがわかります。これでアプリケーション(つまりwwwサーバー)が残ります。設定を最小限に抑えて、どのように進むかを確認してください。たとえば ここ は1つです。

幸運を!

1
AlwaysLearning

編集:一度に1つずつ試してください!

いくつかのことが飛び出します:

MaxRequestsPerChild 0

0プロセスは決して死なない )を使用する理由がない場合は、少し増やして(デフォルトは1000100と言って再起動し、それがあなたに改善をもたらすかどうか見てください。メモリリークを防ぐことができます。

MaxClients 150

サーバーのメモリ量によっては、3つのモジュールすべてが同時に呼び出されている場合は、メモリが不足する可能性があります。たとえば、Apacheプロセスのサイズが20MBの場合、150クライアントx 20MB x 3 mods = 9000 MB〜8.8GBになります。そのうちの1つだけが呼び出されている場合でも、最大2.9GBを使用しています。

3つのmodをすべて使用していない場合は、Apacheインスタンスから不要なmodをアンインストールします。

また、この遅いパフォーマンス中のtopfree -mの出力はどうですか?

1
KM.

ローカルホストまたはネットワーク上のマシンからlynxまたはcurlを介してアクセスしようとするとどうなりますか?

また、Apacheのこのブロックを見てください。

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

そのブロック全体を取り除き、Apacheを再起動して再試行することをお勧めします。 ApacheがローカルホストまたはローカルIPアドレスに対していくつかのdenyアクションを実行すると、奇妙なハングも発生しました。奇妙なDNSルックアップの問題により、リクエストごとにApacheがハングする可能性があります。そして、1ページあたり12秒の遅延が原因だと思います。しかし、私が指摘しているブロックが原因であるかどうかは、構成から100%明確ではありません。ただし、Apacheに接続されているDNSルックアップ関連のタスクを検索します。

また、サイトの実際のトラフィックを監視せずにサーバーでどのような設定を行うべきかを判断するのは難しいですが、KeepAlive設定はリソースが多いように思われることをお勧めします。私はそのように変更することをお勧めします:

KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2

また、MaxClientsを下げ、ServerLimitをメインのApache2.confMaxRequestsPerChildを調整するように追加することをお勧めします。

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit          90
    MaxClients           90
    MaxRequestsPerChild 2000
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      64 
    ThreadLimit          64
    ThreadsPerChild      25
    ServerLimit          90
    MaxClients           90
    MaxRequestsPerChild 2000
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      64 
    ThreadLimit          64
    ThreadsPerChild      25
    ServerLimit          90
    MaxClients           90
    MaxRequestsPerChild 2000
</IfModule>

また、リソースの使用状況を把握するために、マシンに Munin をインストールすることを強くお勧めします。多くの頭痛の種を救い、物事についての良い広い視野を与えます。

1
JakeGould