MySQL进程过多


12

他告诉我他的MySQL使用了太多内存后,我正在尝试帮助他的服务器的朋友。事实证明,这不仅在使用大量内存,而且正在运行太多的mysql进程!

这是结果ps auxww|grep mysqlhttp : //pastebin.com/kYrHLXVW

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

一段时间后,这些进程中的每个进程最多消耗50mb的内存,因此最终消耗了大量的内存...

我直接从/ usr / share / mysql使用my-medium.cnf配置模板...我重新启动了mysql服务器,但是,一旦启动,这13个进程又回来了...我不知道问题可能是...任何想法/建议都将不胜感激!

Answers:


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的内存-他们可能总共使用了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 2013年

3

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

与MySQL有多少个连接?show full processlist;在MySQL客户端中运行。从您的显示中,我什至不确信有什么问题。


结果是:pastebin.com/raw.php?i=XNCsG6KS服务器刚刚启动不确定是否有帮助...通过初始化脚本,您的意思是/etc/init.d/mysql的内容吗?
2010年

这对我来说似乎很正常。
华纳2010年

根据show full processlist该数据库有2个连接。其中show full processlist一个通过phpmyadmin 在本地执行,另一个也是我。该站点尚不存在,因此不应再有任何连接…
user24994

连接的数量将取决于应用程序的执行方式,而不一定与用户数量直接相关。MySQL利用基于cnf设置的内存。是什么让您认为它做错了什么?
华纳

对不起,我想我的问题还不清楚,哈哈,很可能没有错!我只是注意到mysql正在使用大量内存(大约13 * 50mb,所以650mb的ram),并且还没有访问该站点的流量。。。所以我想我的问题更多是“有什么问题吗?” 而不是“出了什么问题” :)
user24994

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.