MySQLプロセスが多すぎる


12

MySQLがメモリを大量に使用していると言った後、友人とサーバーを助けようとしています。大量のメモリを使用しているだけでなく、実行中のmysqlプロセスが多すぎることがわかりました。

結果はps auxww|grep mysql次のとおりです。http//pastebin.com/kYrHLXVW

したがって、基本的に13個のMySQLプロセスがあり、mysqladminに従って接続されるクライアントは1つだけです。

しばらくすると、これらのプロセスはそれぞれ最大50MBのメモリを消費するため、大量のメモリを消費してしまいます...

/ usr / share / mysqlから直接my-medium.cnf構成テンプレートを使用しています... mysqlサーバーを再起動しましたが、起動するとすぐに13個のプロセスが戻ってきます...問題は...どんなアイデア/提案でも大歓迎です!

回答:


16
mysql     9804  0.0  0.6 58556 22960 pts/0   S    12:43   0:00  \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9807  0.0  0.6 58556 22960 pts/0   S    12:43   0:00      \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9808  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9809  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9810  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
[ ... repeated output truncated ... ]

彼らは13 * 50mbのRAMを使用していません-おそらく合計 70mbのようなものを使用しています。Linuxはプロセス間で変更されていないメモリページを共有するため、サーバーを新たに起動すると、そのメモリのほとんどがすべて共有されることに注意してください。実際、mysqlはスレッド化されているため、スレッドごとに割り当てられるメモリはさらに少なくなります。各mysqlプロセスのメモリ使用量が心配な場合は/etc/mysql/my.cnf、を見て、mysqldセクションの変数を見てください。

  • key_buffers
  • thread_stack
  • thread_cache_size
  • max_connections
  • query_cache_limit
  • query_cache_size

ただし、これらは調整するのに非常に強力な変数であり、mysqlのパフォーマンスを低すぎる値に設定したり、高すぎる値を設定して他の場所で使用できるメモリを無駄にしたりする可能性があります。

mysqlインスタンスを調整する最良の方法を見つけるための簡単な出発点は、アプリケーションを少し実行してから、ここからmysqltuneスクリプトを実行することです。これにより、パフォーマンスカウンターが分析され、変更する必要があるものについての推奨事項が生成されますサーバー設定。


1
私は知りませんmysqltuneでした、非常に有用な感謝。また、htopスレッドを色付けして、プロセスごとに使用される実際のメモリを確認するために使用できます。
mveroone

3

Linuxは、スレッドを個別のプロセスとして表示します。MySQLは接続ごとに1つのスレッドを開始します。で実行psしていfます。たとえばps auxfw、スレッドの関係を表示します。

MySQLへの接続はいくつありますか?show full processlist;MySQLクライアントで実行します。あなたが示しているものから、私は何か間違っていると確信さえしていません。


結果は次のとおりです。pastebin.com / raw.php?i=XNCsG6KSサーバーは起動されたばかりです。
user24994

それは私には完全に正常に見えます。
ワーナー

によるとshow full processlist、データベースへの接続は2つあります。それらshow full processlistの1つはlocalhostを実行し、もう1つはphpmyadminを介して私です。サイトはまだ公開されていないため、これ以上の接続はありません
...-user24994

接続の量は、アプリケーションのパフォーマンスに依存し、必ずしもユーザーの数に直接関係するわけではありません。MySQLはcnf設定に基づいてメモリを利用します。何が間違っていると思いますか?
ワーナー

申し訳ありませんが、私の質問でそれは本当に明確ではなかったと思います(笑)、何も悪いことが起こっていない可能性があります!mysqlが大量のメモリ(約13 * 50MB、したがって650MBのRAM)を使用しており、サイトへのトラフィックがまだないことに気づいたばかりです... それで、私の質問は「何か間違っているのではないか?」だったと思います。「問題」の代わりに:)
user24994

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.