さて、私はここで完全に途方に暮れています。このUbuntuサーバーを約3年間実行しています。過去数か月で、それは奇妙な振る舞いを始め、悪化しているだけです。それは約15のWebサイトとその上で他の多くのツールを実行しているかなり忙しいサーバーです。通常の15分の負荷平均は0.3です。ただし、約12時間ごとに約90に急上昇しています。
それはmysqlとサーバーがどういうわけかロックされ、Apacheが物事が開くのを待っているだけであると関係があると確信しています。これが物事が狂っているときのトップです。
Tasks: 143 total, 20 running, 123 sleeping, 0 stopped, 0 zombie
Cpu(s): 34.3%us, 62.9%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.2%hi, 2.6%si, 0.0%st
Mem: 2061444k total, 911460k used, 1149984k free, 11156k buffers
Swap: 1421712k total, 0k used, 1421712k free, 126728k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1080 mysql 20 0 397m 59m 5892 S 18 3.0 0:37.37 mysqld
1602 www-data 20 0 198m 26m 4948 R 7 1.3 0:08.17 Apache2
1725 www-data 20 0 189m 24m 11m R 7 1.2 0:04.33 Apache2
1719 www-data 20 0 189m 25m 12m R 7 1.2 0:03.88 Apache2
1802 www-data 20 0 192m 20m 4808 S 7 1.0 0:03.15 Apache2
1521 www-data 20 0 199m 28m 6912 R 6 1.4 0:10.15 Apache2
1530 www-data 20 0 193m 22m 5104 S 5 1.1 0:06.53 Apache2
1536 www-data 20 0 196m 25m 4936 R 5 1.2 0:07.93 Apache2
1583 www-data 20 0 186m 21m 11m R 5 1.0 0:03.46 Apache2
1722 www-data 20 0 193m 21m 4956 R 5 1.1 0:04.91 Apache2
1906 www-data 20 0 182m 12m 6724 S 5 0.6 0:00.61 Apache2
1439 root 20 0 92040 3672 2280 S 5 0.2 0:08.04 ezproxy
1539 www-data 20 0 194m 27m 9548 R 4 1.3 0:08.08 Apache2
1716 www-data 20 0 187m 22m 11m R 4 1.1 0:03.36 Apache2
1891 www-data 20 0 183m 18m 11m S 4 0.9 0:00.61 Apache2
1498 www-data 20 0 194m 23m 6264 S 4 1.2 0:11.47 Apache2
1517 www-data 20 0 193m 22m 5212 R 4 1.1 0:06.56 Apache2
1523 www-data 20 0 190m 26m 12m S 3 1.3 0:07.61 Apache2
1761 www-data 20 0 186m 20m 10m R 2 1.0 0:02.66 Apache2
1779 www-data 20 0 184m 19m 10m R 2 0.9 0:02.69 Apache2
1711 www-data 20 0 185m 20m 11m R 2 1.0 0:03.32 Apache2
1728 www-data 20 0 182m 11m 5028 R 2 0.6 0:01.14 Apache2
1819 www-data 20 0 181m 8120 3332 S 2 0.4 0:00.49 Apache2
1886 www-data 20 0 182m 11m 6364 S 2 0.6 0:01.18 Apache2
1899 www-data 20 0 184m 18m 10m S 2 0.9 0:01.38 Apache2
1497 www-data 20 0 191m 27m 12m S 1 1.4 0:07.84 Apache2
1766 www-data 20 0 181m 10m 5016 R 1 0.5 0:01.39 Apache2
1871 www-data 20 0 184m 19m 11m R 1 1.0 0:00.98 Apache2
1563 www-data 20 0 186m 23m 13m S 1 1.2 0:07.37 Apache2
1865 www-data 20 0 184m 18m 10m S 1 0.9 0:01.56 Apache2
1494 www-data 20 0 193m 25m 8352 S 1 1.3 0:12.07 Apache2
1512 www-data 20 0 186m 23m 13m R 1 1.1 0:06.10 Apache2
1526 www-data 20 0 186m 24m 13m R 1 1.2 0:06.30 Apache2
1816 www-data 20 0 184m 18m 10m S 1 0.9 0:01.60 Apache2
1516 www-data 20 0 184m 19m 11m S 1 1.0 0:04.12 Apache2
現在、物事は穏やかに動いています、
Uptime: 241264 Threads: 1 Questions: 1870412 Slow queries: 1354 Opens: 13818 Flush tables: 1 Open tables: 256 Queries per second avg: 7.752
ここに私のMBサイズのすべてがあります
name1 14.78335094
name2 11.08541870
name3 31.01449203
name4 6.24377346
name5 0.36655807
name6 10.95312500
information_schema 0.00781250
mysql 0.60296535
name7 2.19595051
name8 1.82343006
name9 20.51372623
name0 59.42693043
遅いクエリログを確認しましたが、ロックアップが発生すると、すべてのクエリが遅いクエリログにダンプされます。 proccesslistを実行するとき、私はサーバーにいませんでした。それ以外に何かできることはありますか?
更新:tuning-primer.shスクリプトからの出力は次のとおりです: https://Gist.github.com/913565
更新:以下は、異常終了時のIOStatです。
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 5.25 6.05 106.35 3090763 54314928
そしてvmstat3: https://Gist.github.com/913565#file_vmstat%2
SARが増えました! https://Gist.github.com/913565#file_sar
助けてくれてありがとう。
sar
をインストールして、バックグラウンドで実行してみてください。スパイクしているディスク負荷がある可能性があります。 sar
を使用すると、このような問題が発生したときに最も負荷が高いリソースを確認できます。
sys
の負荷が高い場合は、大量のI/Oが発生している可能性があります。これは、データベースの自然な成長の結果である可能性があります。データベースから古いデータを削除するためのアーカイブプロセスはありますか?そうでない場合は、テーブルスキャンに必要なデータがメモリに収まらなくなるポイントに到達します。これが発生すると、パフォーマンスが突然大幅に低下します。遅いクエリログには、インデックスを追加することで改善できるクエリが含まれている場合があります。
munin
を実行できる別のシステムがある場合は、munin-node
をサーバーにインストールすることをお勧めします。これにより、sar
から入手できるデータの一部がグラフィカルに出力されます。グラフを頻繁にチェックして、状況が変化しているかどうかを確認してください。
編集:Apacheで実行されている一部のコードでメモリリークが発生している可能性があります。 MaxRequestsPerChild
を約100に設定し、Apacheを再起動してみてください。それで問題が解決した場合は、メモリリークを見つけてください。
データベースのサイズはMB単位ですよね?これはかなり小さく、設定されたメモリ量にほぼ完全に固執するはずなので、ここではmysqlが問題になるとは思いません。とにかく MySQL Tuning Primer の出力を投稿していただけませんか?さらに、システムに関するデータをグラフ化して収集するには、munin/cacti/..のようなものを使用する必要があります。マシンで実行されているソフトウェアの種類を教えてください。 phpのもの? APCのようなオペコードキャッシュをすでに使用していますか?
ツールsar
のほかに、ツールvmstat
およびiostat
も使用できます。 iostatは、問題がIOに関連している場合に役立ちます。たとえば、vmstat 3
の出力を提供すると、より適切に役立つ可能性があります(これにより、vmstatの出力が3ごとに出力されます)秒。1〜2分後にツールを停止できます。)
定期的なMySQLクエリが非常に多くの結果を返し/処理し始めてMySQLが物理メモリを使い果たし、大量の仮想メモリを使用しなければならなくなるまでデータのサイズが大きくなった可能性はありますか?
オープン:13818オープンテーブル:256
...すべてのテーブルはディスクから開かれていますが、そのうち256個です。ディスクは遅く、ブロッカーです。
table_cache
でmysqlの/etc/mysql/my.cnf
値を増やすことができます。
また実行:
mysqlcheck --auto-repair --check --optimize --all-databases
元のパフォーマンスの一部を回復するため。
とにかく2GのRAM、26mのhttpdプロセスの場合、+ /-80以下のhttpdプロセス用のスペースを提供します...多くのWebには、サーバーへの50〜100の「ファイル」(js、css、imgsなど)があると言います各リクエスト...数回の訪問でスワップとブロックが簡単です。