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の動作は非常に遅くなります。この振る舞いは本当に前例のないものであり、サーバーを非常に使いにくくします。何か案は...?
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つずつ試してください!
いくつかのことが飛び出します:
MaxRequestsPerChild 0
0
( プロセスは決して死なない )を使用する理由がない場合は、少し増やして(デフォルトは1000
)100
と言って再起動し、それがあなたに改善をもたらすかどうか見てください。メモリリークを防ぐことができます。
MaxClients 150
サーバーのメモリ量によっては、3つのモジュールすべてが同時に呼び出されている場合は、メモリが不足する可能性があります。たとえば、Apacheプロセスのサイズが20MBの場合、150クライアントx 20MB x 3 mods = 9000 MB〜8.8GBになります。そのうちの1つだけが呼び出されている場合でも、最大2.9GBを使用しています。
3つのmodをすべて使用していない場合は、Apacheインスタンスから不要なmodをアンインストールします。
また、この遅いパフォーマンス中のtop
とfree -m
の出力はどうですか?
ローカルホストまたはネットワーク上のマシンから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.conf
にMaxRequestsPerChild
を調整するように追加することをお勧めします。
<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 をインストールすることを強くお勧めします。多くの頭痛の種を救い、物事についての良い広い視野を与えます。