主题: centos 5.6下面,mysql连接数过高

在centos5.6下面安装iredmail0.7.1,其他都比较正常,就是mysql的连接数过高,昨天更新了老大的iredapd1.3.6,在mysql里面show processlist,进程数是减少了,得到了及时的释放。但连接数还是不断增加。

mysql> show status like '%Threads%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Delayed_insert_threads | 0     |
| Slow_launch_threads    | 0     |
| Threads_cached         | 0     |
| Threads_connected      | 23    |
| Threads_created        | 8728  |
| Threads_running        | 1     |
+------------------------+-------+
6 rows in set (0.00 sec)


mysql> show status like '%connect%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Aborted_connects         | 1     |
| Connections              | 8839  |
| Max_used_connections     | 49    |
| Ssl_client_connects      | 0     |
| Ssl_connect_renegotiates | 0     |
| Ssl_finished_connects    | 0     |
| Threads_connected        | 23    |
+--------------------------+-------+
7 rows in set (0.00 sec)

从mysql状态可以看出,实际连接的线程数只有20多个,但增加的连接数多达8000多个,一直不减,估计到最后,mysql又会超出连接数(我已经设置mysql连接数位10000)。

请老大帮忙分析分析,到底是什么原因引起的?

回复: centos 5.6下面,mysql连接数过高

能帮忙检查出是哪个程序在不断增加 thread 么?我这里没有这样的环境可供分析。

回复: centos 5.6下面,mysql连接数过高

ZhangHuangbin 写道:

能帮忙检查出是哪个程序在不断增加 thread 么?我这里没有这样的环境可供分析。

[root@mail ~]# netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
TIME_WAIT        110
CLOSE_WAIT       3
FIN_WAIT2        4
ESTABLISHED      64

查看系统网络连接状态,也并没有出现异常呀。


mysql> show status like '%connect%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Aborted_connects         | 3     |
| Connections              | 873   |
| Max_used_connections     | 44    |
| Ssl_client_connects      | 0     |
| Ssl_connect_renegotiates | 0     |
| Ssl_finished_connects    | 0     |
| Threads_connected        | 21    |
+--------------------------+-------+
7 rows in set (0.00 sec)

刚刚查了一下资料,mysql中
   Threads_connected  表示当前的连接数
   Connections  表示试图连接到(不管是否成功)MySQL服务器的连接数。
   Max_used_connections  表示服务器启动后已经同时使用的连接的最大数量。
我服务器中Connections连接数过多,但查看系统网络连接参数又无异常,所以我觉得这个问题非常诡异。
另外,我好像以前加过你的msn哦,我是EMOS的前期技术指导……哈。

回复: centos 5.6下面,mysql连接数过高

另外,汇报一个最新情况。经过昨晚iredapd1.3.6的升级,mysql中sleep的进程数明显降低了很多。但connections数量太多还是有点担心,因为作为邮件系统,当connections数量超过 max_connections 的时候,收发邮件就出现问题了,只有重启mysqld进程才可,郁闷哦!

5 最后由 zyf76123 (2011-05-24 10:38:10) 编辑

回复: centos 5.6下面,mysql连接数过高

我刚才看到这个帖子,我也上我的服务器上看了一下连接数,发现连接数也高,超过了最大的连接数。
我的系统是centos5.5+iredmail0.7.1+mysql
iredapd也是升级到最新的。

mysql> show status like '%connect%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| Aborted_connects         | 9      |
| Connections              | 147229 |
| Max_used_connections     | 411    |
| Ssl_client_connects      | 0      |
| Ssl_connect_renegotiates | 0      |
| Ssl_finished_connects    | 0      |
| Threads_connected        | 17     |
+--------------------------+--------+
7 rows in set (0.00 sec)

mysql> show status like '%Threads%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Delayed_insert_threads | 0     |
| Slow_launch_threads    | 1     |
| Threads_cached         | 1     |
| Threads_connected      | 17    |
| Threads_created        | 43928 |
| Threads_running        | 1     |
+------------------------+-------+
6 rows in set (0.00 sec)

回复: centos 5.6下面,mysql连接数过高

查了一下官方的手册: http://dev.mysql.com/doc/refman/5.0/en/ … onnections

Connections

The number of connection attempts (successful or not) to the MySQL server.

如果我没理解错的话,它只是记录从 mysql server 启动以来共处理了多少次连接请求而已。

回复: centos 5.6下面,mysql连接数过高

完全没关系,虽然不是邮件系统的,
下面是我网站数据库上的


mysql> show status like '%Threads%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Delayed_insert_threads | 0     |
| Slow_launch_threads    | 0     |
| Threads_cached         | 81    |
| Threads_connected      | 73    |
| Threads_created        | 154   |
| Threads_running        | 2     |
+------------------------+-------+
6 rows in set (0.00 sec)

mysql> show status like '%connect%';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| Aborted_connects     | 0      |
| Connections          | 702791 |
| Max_used_connections | 154    |
| Threads_connected    | 75     |
+----------------------+--------+
4 rows in set (0.00 sec)

回复: centos 5.6下面,mysql连接数过高

上面是源码编译安装的mysql

回复: centos 5.6下面,mysql连接数过高

再看一台rpm包安装的

mysql> show status like '%Threads%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Delayed_insert_threads | 0     |
| Slow_launch_threads    | 0     |
| Threads_cached         | 8     |
| Threads_connected      | 99    |
| Threads_created        | 2735  |
| Threads_running        | 2     |
+------------------------+-------+
6 rows in set (0.01 sec)

mysql> show status like '%connect%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Aborted_connects         | 0     |
| Connections              | 31676 |
| Max_used_connections     | 132   |
| Ssl_client_connects      | 0     |
| Ssl_connect_renegotiates | 0     |
| Ssl_finished_connects    | 0     |
| Threads_connected        | 103   |
+--------------------------+-------+
7 rows in set (0.00 sec)

mysql>

回复: centos 5.6下面,mysql连接数过高

说来也很奇怪,我也查了mysql手册,Connections表示已经建立的连接和尝试建立的连接,原则上只是一个统计,并不是并发连接数量,但iredmail0.7.1环境里面,一旦这个connections超过mysql设置的最大连接数,邮件客户端就不断抛出“Out: 451 4.3.0 <xxx@yyy.com>: Temporary lookup failure”这样的错误,很多用户都反映邮件发不出去,连接服务器失败!
昨晚就已经升级了iredapd1.3.6,(老大说这个版本解决了mysql连接释放问题。)
今天下午将近下班的时候又出现这种错误,之前出现错误只有重启mysql服务,今天我把postfix配置文件里面调用iredapd(也就是127.0.0.1:7777)屏蔽掉,并停掉iredapd服务,到现在也没有出现错误了……

接下来再观察观察,看看到底是不是因为iredapd引起的,因为之前用iredmail老版本,没有安装iredapd服务的时候,好像从未出现过mysql错误。

11 最后由 thatday (2011-05-25 16:21:33) 编辑

回复: centos 5.6下面,mysql连接数过高

看了相关资料,怀疑是amavisd过滤邮件引起,所以重新开启了iredapd服务,
通过调大amavisd的子进程数
$max_servers = 4;
然后将/etc/postfix/master.cf中amavisd部分修改为
smtp-amavis unix -  -   -   -   4  smtp

观察了半天,直到刚才,又出现10几封邮件退信到管理邮箱。
查了一下iredapd进程,发现很多TIME_WAIT,怀疑到底是不是iredapd引起?
请张老大看看,谢谢了!

[root@mail ~]# netstat -na|grep 7777
tcp        0      0 127.0.0.1:7777              0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:7777              127.0.0.1:40734             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40735             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40732             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40733             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40730             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40731             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40728             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40729             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40726             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40727             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40724             FIN_WAIT2
tcp        0      0 127.0.0.1:7777              127.0.0.1:40725             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40722             FIN_WAIT2
tcp        0      0 127.0.0.1:7777              127.0.0.1:40723             FIN_WAIT2
tcp        0      0 127.0.0.1:7777              127.0.0.1:40719             FIN_WAIT2
tcp        0      0 127.0.0.1:7777              127.0.0.1:40717             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40715             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40712             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40766             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40764             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40765             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40763             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40760             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40761             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40758             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40759             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40756             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40757             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40754             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40755             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40752             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40753             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40751             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40749             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40746             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40747             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40744             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40742             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40740             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40741             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40738             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40739             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40736             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40737             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:47448             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40782             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40781             FIN_WAIT2
tcp        0      0 127.0.0.1:7777              127.0.0.1:40778             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40779             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40776             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40777             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40774             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40775             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40772             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40773             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40770             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40771             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40768             TIME_WAIT
tcp        0      0 127.0.0.1:7777              127.0.0.1:40769             TIME_WAIT
tcp        1      0 127.0.0.1:40781             127.0.0.1:7777              CLOSE_WAIT
tcp        1      0 127.0.0.1:40719             127.0.0.1:7777              CLOSE_WAIT
tcp        1      0 127.0.0.1:40722             127.0.0.1:7777              CLOSE_WAIT
tcp        1      0 127.0.0.1:40723             127.0.0.1:7777              CLOSE_WAIT
tcp        1      0 127.0.0.1:40724             127.0.0.1:7777              CLOSE_WAIT

回复: centos 5.6下面,mysql连接数过高

求问您用的是基于mysql后台的?

回复: centos 5.6下面,mysql连接数过高

是的,因为对mysql稍微熟悉一点,可以做些二次开发。而且之前的邮件系统也是基于mysql的,账号迁移比较方便。