最近、サーバーの CPU 使用率が非常に高くなりました。
CPU 負荷の平均は 13.91 (1 分) 11.72 (5 分) 8.01 (15 分) で、サイトのトラフィックはわずかに増加しただけです。
top コマンドを実行した後、MySQL が 160% の CPU を使用していることがわかりました!
最近、テーブルを最適化し、永続的な接続に切り替えました。これにより、MySQL が大量の CPU を使用している可能性がありますか?
最初に、永続的な接続はほとんどの場合、良いことよりも害を及ぼすため、おそらくオフにすることをお勧めします。
次に、MySQL ユーザーを再確認して、リモート サーバーから誰も接続できないようにすることをお勧めします。これは、チェックすべき重要なセキュリティ事項でもあります。
3 番目に、MySQL スロー クエリログを有効にして、時間がかかるクエリを監視し、これを使用してキー テーブルを長時間ロックしているクエリがないことを確認します。
他に確認できることは、CPU 負荷が高いときに次のクエリを実行することです。
SHOW PROCESSLIST;
これにより、現在実行中または実行するキューにあるクエリ、クエリの内容、および実行中のクエリが表示されます (このコマンドは、クエリが長すぎる場合はクエリを切り捨てます。SHOW FULL PROCESSLIST を使用して、完全なクエリ テキストを表示できます)。 .
また、バッファー サイズ、テーブル キャッシュ、クエリ キャッシュ、およびinnodb_buffer_pool_size (innodb テーブルを使用している場合) などにも注意する必要があります。これらのメモリ割り当てはすべて、クエリのパフォーマンスに影響を与え、MySQL のパフォーマンスに影響を与える可能性があるためです。 CPUを食い尽くす。
また、いくつかの良い情報が含まれているため、次の内容を読み直すことをお勧めします。
プロファイラーを使用することも非常に良い考えです。必要なときにオンにできるものは、アプリケーションが実行しているクエリ、重複するクエリがある場合、それらにかかる時間などを表示します。このようなものの例は、私が取り組んできたものですPHP プロファイラーですが、世の中にはたくさんあります。Drupal、Joomla、Wordpress などのソフトウェアを使用している場合は、コミュニティ内で質問することをお勧めします。これらのソフトウェアには、手動で何も統合しなくてもこの情報を取得できるモジュールがおそらくあるためです。
これは、MySQL の高い CPU 使用率または負荷をグーグルで検索した場合のトップの投稿であるため、追加の回答を追加します。
2012 年 7 月 1 日、潮汐による地球の自転の遅れを補うために、現在の UTC 時間にうるう秒が追加されました。ntp (または ntpd) を実行すると、この秒がコンピュータ/サーバーのクロックに追加されました。MySQLd は一部の OS でこの余分な秒を好まないようで、CPU 負荷が高くなります。簡単な修正は(ルートとして):
$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start
このサーバーが外の世界から見える場合、外の世界からの接続要求が多いかどうかを確認する価値があります (つまり、サーバーに侵入しようとしている人)。