LAMPサーバーで問題が発生しています。最近、私のウェブサイトの訪問者数はそれほど変わらなかったにもかかわらず、すべてが非常に遅くなりました。 top
コマンドを実行すると、MySQLプロセスがCPUの150〜200%を占有していると表示されます。それはどうして可能ですか、私はいつも100%が最大だと思っていましたか?
1.5 GBのRAMを搭載したUbuntu 9.04サーバーエディションを実行しています。
my.cnf
設定:
key_buffer = 64M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
table_definition_cache = 512
thread_concurrency = 2
read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M
query_cache_limit = 1M # the maximum size of individual query results
query_cache_size = 128M
次に MySQLTuner の出力を示します。
top
コマンド:
この問題の原因は何ですか?サーバーがハングしないようにmy.cnf
を変更できますか?
その他の推奨される構成オプション:
しばらくしてからログファイルを確認してください。
複数のコアを搭載したプロセッサ、または複数のプロセッサを使用しています。 2つのコアがあり、プロセスが両方のコアの100%を使用している場合、上部に200%と表示されます。
同様に、これはおそらく意図したとおりに機能しています-構成に問題はありません。頻繁にハングしている場合は、投稿した内容から、テーブルに適切なインデックスを追加する(またはクエリを最適化する)ことを検討してください。
top -H
を実行すると、プロセス全体だけでなく、実行中のすべてのスレッドが表示されます。また、上にいるときに1
キーを押すと、個々のCPU /コアのCPU使用率が表示されます。
Mysqlには複数のプロセス(スレッド)が独立して動作します。たとえば、メモリからディスクにデータを書き込むプロセスが1つあります。 CPU(および/または複数のCPU)に複数のコアがある場合、複数のスレッドが動作しているため、単一のコアの100%以上を実行できます-単純化したレベルでは、2つのコアそれぞれの75%が実行されています、150%を提供します。
CPUに関連しない問題に気づきました。同じサーバーでApacheとMySQLを使用している場合、Apacheアクティビティが増加すると、悪い状態([〜#〜] ram [〜#〜])に達する可能性があります。
MySQLTunnerは、200の使用可能な接続(最大接続設定)を使用すると、RAMがいっぱいになることを伝えます。 Apacheを150プロセスに制限しているとしましょう。MySQLとApacheが150接続を使用しようとすると、確かに十分なRAMがありません(Apacheも良いですRAM食べる人)。
したがって、これはRAMについてであり、まだヒットしていない可能性があります:-)上位のコマンドは15のApacheプロセスしか表示しません(ただし、負荷は平均3/6/16なので、ストームは15でした。分前で、現在は出発中です)。
CPUの問題については、shakalandyの適切な応答を補完するために、単一のクエリが原因である可能性があります。それは巨大なテーブル上にあるか、多くの再インデックスタスクを実行している、または多くの一時ファイルを使用している、インデックスが欠落している(削除された?)などです。それを検出する唯一の方法は遅いクエリログ(おそらく8秒のような高いしきい値で)。次に、mysqlslaツールを使用して、この遅いクエリログを分析し、特定されたクエリに対していくつかの説明を実行します。