MySQL 进程过多

MySQL 进程过多

在一位朋友告诉我他的 MySQL 使用了太多内存后,我试图帮助他解决他的服务器问题...事实证明,它不仅使用了大量内存,而且还运行了太多的 mysql 进程!

结果如下ps auxww|grep mysqlhttp://pastebin.com/kYrHLXVW

因此基本上有 13 个 MySQL 进程,并且根据 mysqladmin 只有 1 个客户端连接...

过了一会儿,每个进程都会占用多达 50mb 的内存,最终会消耗大量内存......

我直接从 /usr/share/mysql 使用 my-medium.cnf 配置模板...我重新启动了 mysql 服务器,但是,一旦启动,13 个进程就会回来...我不知道问题出在哪里...任何想法/建议都将非常感谢!

答案1

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 的内存,而是大概 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 脚本,它将分析你的性能计数器,然后对你应该在服务器配置中更改的内容提出建议。

答案2

Linux 将线程显示为单独的进程。MySQL 为每个连接启动一个线程。使用 运行psf例如,ps auxfw将显示线程之间的关系。

有多少个与 MySQL 的连接?show full processlist;在 MySQL 客户端中运行。从您显示的内容来看,我甚至不确定是否存在任何问题。

答案3

你可能想尝试MySQLTuner我发现它非常有用,它会建议您应该尝试调整哪些配置变量。

相关内容