専用サーバーでサイトを運営しています。

最近サーバーがよくダウンする感じです。

vmstatで監視すると
不定期で「b」が膨れ上がり
それに伴いloadaverageも膨れ上がり
最終的にサーバーがダウンしてしまいます。

「b」がふくれあがる原因はmysqlであることは確認していて
mysqlまわりを見直せ!というのはわかるのですが
以前借りていたサーバー(VPS)ですと特にダウンすることもなかったので
なぜ新しく借りた専用サーバーだとダウンまでいってしまうのかと
疑問が生じています。

例えばvmstatの「b」の上限を制限するとかで
このダウンを回避する方法があったりすんでしょうか?
そしてその回避方法が紹介されているURLなどご存知でないでしょうか?
その他に「b」の上昇をストップさせる方法などないでしょか?

よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/06/13 22:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント19pt

一般的に b の値が高いのは、I/O待ちをしているプロセスがたくさんあるということを意味します。

bi/bo の値も確認してください。これらも大きいと、ハードディスクの読み書きが頻発している状態にあります。


原因として考えられることは

  • メモリ不足
  • ディスクに異常がある
  • 他のデーモンなどが頻繁にディスクアクセスしている

などです。

id:akahoshitakuya

ありがとうございます。

そして説明不足でした。

http://php.y-110.net/wiki/index.php?%A5%B5%A1%BC%A5%D0%BF%C7%C3%...

↑ここと同じ症状です。

「# 他のデーモンなどが頻繁にディスクアクセスしている」

こちらですが、mysqlの書き込みor読み書きだと思うんですよね。

mysqlのプロセルをkillすると「b」の値が急激に下がります。

この「b」を一定の値で制御できないんですかねー

メモリを増やすべきか・・。

2008/06/06 23:02:06
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント19pt

こちらですが、mysqlの書き込みor読み書きだと思うんですよね。

mysqlのプロセルをkillすると「b」の値が急激に下がります。

この「b」を一定の値で制御できないんですかねー

ディスクのI/O 待ちを制御するって事は、MySQL が受け付けるコネクションの量を減らして

処理自体を減らすしかないと思うが。


MySQL プロセスのみが原因でメモリに余裕があるなら key_buffer 等を多めにとれば

アクセス頻度を下げることは出来るかもしれない。


いずれにせよパフォーマンスチューニングの領域だとは思う。

id:akahoshitakuya

ありがとうございます。

今は、ちょっとチューニングして、

たまに「b」が10くらいまで上がることがあるんですが

次第に落ち着いて0に戻ります。

これは並んだ行列を捌けているということですよね。

前までは捌く前にどんどん行列ができて

いっぱいっぱいになる。

コネクションを減らすということは

行列に並ぶもの自体を減らすということですよね。

sqlの見直しがひつようなのかな。

2008/06/07 11:01:20
id:ahirusan No.3

回答回数229ベストアンサー獲得回数3

ポイント18pt

DBMSに対するアクセスに対してデッドロックを起こしているのではないでしょうか。それによって資源が枯渇している可能性が高いと思います。

id:akahoshitakuya

ありがとうございます。

「デッドロック」

http://dev.mysql.com/doc/refman/4.1/ja/innodb-deadlocks.html

この辺ですかね。

2008/06/07 10:57:39
id:pahoo No.4

回答回数5960ベストアンサー獲得回数633

ポイント18pt

#1のコメントに対して:

limits.confを書き換えることで、利用できるリソースを制限することはできますが、まずは#2さんの回答通り、MySQL のチューニングを試みるべきでしょう。

そもそも MySQL のみでそれだけのディスクI/Oを要求しているならば、それだけの処理をしているということなので、それを制限してしまうと、正常にトランザクション処理できなくなります。


ただし、以前のサーバと比較して、メモリ容量が極端に小さいようでしたらメモリの増設をお勧めします。


回答回数上限になりましたので、これにて失礼します。

id:akahoshitakuya

ありがとうございます。

以前のサーバーはVPSでメモリ2G。

今のサーバーは専用で1Gです。

1G少ないんですが

専用で使えるんで大丈夫かなーとおもってたんですが

もしかしてこの考えが甘かったのかな?

と思ってきました。

※VPSの2GはVPS利用者間で2Gを共有しているんですよね?

2008/06/07 10:46:37
id:pahoo No.5

回答回数5960ベストアンサー獲得回数633

ポイント18pt

回答回数上限設定を変更していただいたので、#4のコメントに回答します。


ご利用のOSも分かりませんし、MySQLにどのような処理を行わせているのか分からないので何とも言えませんが、まず、下記サイトを参考に、どのくらいのメモリ量が必要なのか計算してください。

これらのパラメータの変更が可能なら、まず、チューニングを試みてください。

チューニングができないようなら、メモリを増設してください。32bit Linux であれば、MySQL は4Gバイトまで対応します。


VPSの2GはVPS利用者間で2Gを共有しているんですよね?

そうですが、同時にメモリ空間を使い切ってしまうことはないと思うので、各々のユーザーに2Gバイトを割り当てているのではないでしょうか。

ただし、VPSと現在の専用サーバのOSが違うとすると、一概に比較することはできません。同じLinuxでもディストリビューションや走っているデーモンが異なれば、利用可能なメモリ量は変わってきます。

id:akahoshitakuya

ありがとうございます。

参考になります。

VPSにメモリのことを問い合わせましたら

2G共有で、あまりにも多く使うと500Mに制限されるという話でした。

また現在の専用のOSはCentOS 5 です。

VPSの時のOSは

ゲストがRed Hat Enterprise Linux 3.0です。

ホストがRed Hat Enterprise Linux 4.0です。

vmstat 1

で監視しているんですがいつもは0で

たまに1、2が出てきます。

この時は安定しますね。

でたまに10近くまで上がって

ここからまた0に戻るときもあるんですが

ずーっと上昇し続けるときがあります。

そうなると手がつけられなくなるので

mysqlのプロセスをkillすると「b」が急激に下がり

安定します。

いろいろチューニングしてみます。

ありがとうございます!

2008/06/10 09:52:16
id:b-wind No.6

回答回数3344ベストアンサー獲得回数440

ポイント18pt

厳密な状況を見ていないので本当に MySQL だけが原因かわかりませんが、一応チューニングのポイントを。

原則 id:pahoo さんのおっしゃるとおり

そもそも MySQL のみでそれだけのディスクI/Oを要求しているならば、それだけの処理をしているということなので、それを制限してしまうと、正常にトランザクション処理できなくなります。

という状況が予測されるので、自分の回答の以下の部分は最後の手段といった感じです。

コネクションを減らすということは

行列に並ぶもの自体を減らすということですよね。

行列自体の長さを制限するわけですから、それ以上の人が集まればエラーになりますので。


MySQL でチューニングできるパラメーターは多くありますが、それだけで何倍にも性能アップするケースは

まれなので原則 SQL の見直しやアプリケーション側の処理方法変更のほうが効率的です。

DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!

どこがネックになっているかを調べるには slow-query ログを設定するのがたいていの場合即効性がある。

【MySQLウォッチ】第8回 MySQLチューニングのテクニック:ITpro

ここに出てくるクエリだけでも書き換えるとスループットは改善する可能性が高い。


負荷が高い状況に直面できれば mytop/innotop といったツールで直接的に状況を見ることも出来ます。

id:akahoshitakuya

参考になります。

ありがとうございます!

やっぱりSQLの見直しなんでしょうか。。

ただやっぱり気になるのは以前のサーバーで同じコードでダウンしていなかったということなんですよね。

チューニングしてみます!

2008/06/10 09:55:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません