太多的MySQL进程

当他告诉我他的MySQL使用了太多的内存后,我试图帮助他的服务器的朋友…事实certificate,它不仅使用大量的内存,但有太多的mysql进程运行的方式!

这里是ps auxww|grep mysql的结果: http : //pastebin.com/kYrHLXVW

所以基本上有13个MySQL进程,根据mysqladmin只有一个客户端连接…

过了一会儿,这些过程中的每一个都吃掉了50MB的内存,所以最终消耗了大量的内存。

我直接从/ usr / share / mysql使用my-medium.cnfconfiguration模板…我重新启动了mysql服务器,但是一旦启动,13个进程就回来了…我不知道是什么问题可能是…任何想法/build议将非常感激!

 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是线程化的,所以每个线程只会分配更less的内存。 如果您担心每个mysql进程的内存使用情况,请查看/etc/mysql/my.cnf ,并查看mysqld部分中的variables:

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

不过要注意的是,这些variables是非常强大的variables,你可以很容易地把你的mysql性能设置得太低,或者浪费太高的内存,

找出调整你的mysql实例的最好方法的一个简单的出发点就是运行你的应用程序一点点,然后从这里运行mysqltune脚本,它将分析你的性能计数器,然后产生一个你应该改变什么的build议你的服务器configuration。

Linux将线程显示为单独的进程。 MySQL每个连接启动一个线程。 用f运行ps 。 例如, ps auxfw将显示线程是如何相关的。

有多less个连接到MySQL? 运行show full processlist; 在MySQL客户端。 从你展示的内容来看,我甚至没有信心有什么不妥。

你可能想尝试一下我发现非常有用的MySQLTuner ,它会向你build议你应该调整哪个configurationvariables。