是的,因为对mysql稍微熟悉一点,可以做些二次开发。而且之前的邮件系统也是基于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

说来也很奇怪,我也查了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错误。

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

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的前期技术指导……哈。

在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)。

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

ZhangHuangbin 写道:

将 /opt/iredapd/etc/iredapd.ini 里的 log_level 参数设置为 debug,重启 iredapd 之后它会记录很多详细的 debug 信息,尝试从 debug 信息里看一下它报什么错误。

[general]
...
log_level = debug

昨天把freebsd又换成linux了就可以了,有机会再在freebsd下面测试一下。

ZhangHuangbin 写道:

这个是 iRedMail 的 v0.7.0 和 v0.7.1 里 MySQL 版的一个已知问题:iRedAPD 会很快占满 MySQL 的所有可用连接,导致无法连接 iredapd 服务。

这里是解决方案:
http://www.iredmail.org/forum/topic1972 … denly.html

这个问题可把我害苦了,我将整个企业邮局从linux迁移到freebsd,最后才发现原来是iredapd的mysql连接没有及时关闭,造成mysql频繁当掉,客户端总出现连接服务器timeout提示。研究了几天mysql的参数设置,不断调整my.cnf参数也无济于事。

总之,已经更新了iredapd 1.3.6,希望这个问题能就此解决。

辛苦老大!

同样是iRedMail-0.7.1,在linux下面,别名邮件接收规则没问题。
但在freebsd8.2下面安装了iRedMail-0.7.1,设置好别名和接收规则,只允许别名管理员接收,但不生效,重启iredapd服务也不行!

iredapd日志为:

2011-05-23 16:11:03 INFO Starting iredapd (v1.3.5, pid: 1502), listening on 127.0.0.1:7777.
2011-05-23 16:11:19 INFO kevin@green.com -> info@green.com, DUNNO
2011-05-23 16:25:49 INFO Starting iredapd (v1.3.6, pid: 1626), listening on 127.0.0.1:7777.
2011-05-23 16:26:24 INFO kevin@green.com -> info@green.com, DUNNO

别名接收规则不管设置为那一种,结果都是DUNNO,所有人都可以给这个info@green.com发送邮件。

请问张老大,这是怎么回事呢?

satan 写道:

似乎是postfix2.6出了问题,我进ports手工make install一下,是可以正常安装的,但是用iredmail安装脚本就说某个路径不存在什么的,我水平有限找不到办法,所以来这里请求指导。谢谢!

我猜,是不是因为/var/db/ports/postfix/options这里边的参数是针对postfix2.5的,所以用这些参数编译2.6的postfix才会报错?要是这样的话,老大应该在这里做个判断,如果是2.5的,就往/var/db/ports/postfix/options这里添加目前的参数,如果是2.6的postfix,就另行处理,老大觉得呢?