web-dev-qa-db-ja.com

サーバーの負荷平均が90にジャンプする原因を特定する方法

さて、私はここで完全に途方に暮れています。この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

助けてくれてありがとう。

5
mattmcmanus

sarをインストールして、バックグラウンドで実行してみてください。スパイクしているディスク負荷がある可能性があります。 sarを使用すると、このような問題が発生したときに最も負荷が高いリソースを確認できます。

sysの負荷が高い場合は、大量のI/Oが発生している可能性があります。これは、データベースの自然な成長の結果である可能性があります。データベースから古いデータを削除するためのアーカイブプロセスはありますか?そうでない場合は、テーブルスキャンに必要なデータがメモリに収まらなくなるポイントに到達します。これが発生すると、パフォーマンスが突然大幅に低下します。遅いクエリログには、インデックスを追加することで改善できるクエリが含まれている場合があります。

muninを実行できる別のシステムがある場合は、munin-nodeをサーバーにインストールすることをお勧めします。これにより、sarから入手できるデータの一部がグラフィカルに出力されます。グラフを頻繁にチェックして、状況が変化しているかどうかを確認してください。

編集:Apacheで実行されている一部のコードでメモリリークが発生している可能性があります。 MaxRequestsPerChildを約100に設定し、Apacheを再起動してみてください。それで問題が解決した場合は、メモリリークを見つけてください。

5
BillThor

データベースのサイズはMB単位ですよね?これはかなり小さく、設定されたメモリ量にほぼ完全に固執するはずなので、ここではmysqlが問題になるとは思いません。とにかく MySQL Tuning Primer の出力を投稿していただけませんか?さらに、システムに関するデータをグラフ化して収集するには、munin/cacti/..のようなものを使用する必要があります。マシンで実行されているソフトウェアの種類を教えてください。 phpのもの? APCのようなオペコードキャッシュをすでに使用していますか?

1
shakalandy

ツールsarのほかに、ツールvmstatおよびiostatも使用できます。 iostatは、問題がIOに関連している場合に役立ちます。たとえば、vmstat 3の出力を提供すると、より適切に役立つ可能性があります(これにより、vmstatの出力が3ごとに出力されます)秒。1〜2分後にツールを停止できます。)

0

定期的なMySQLクエリが非常に多くの結果を返し/処理し始めてMySQLが物理メモリを使い果たし、大量の仮想メモリを使用しなければならなくなるまでデータのサイズが大きくなった可能性はありますか?

0
user70463

オープン: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など)があると言います各リクエスト...数回の訪問でスワップとブロックが簡単です。

0
poisonbit