今天在测试一个MPI程序时出现一个比较奇怪的现象,当启动小于100个左右的进程时,程序运行正常,能够得到正确的结果,但是当启动的进程数量超过120时,就会出现大量的任务失败现象。该MPI程序的各个子进程间需要并发的从MySQL数据库读取数据,抽回到各自的计算节点进行计算,最后再并发的写回MySQL数据库。反复检查了程序代码,并没有发现什么异常,但是根据程序打出log分析,所有的失败任务都是因为打开数据库连接失败,由此想到应该是过多的数据库连接超过了数据库的并发处理限制或者能力所导致。
检查mysql的最大连接数限制:
show variables like "max_connections"
+-------------------+------------+
| Variables_name | Value |
+-------------------+------------+
| max_connections | 151 |
+-------------------+------------+
128个进程相对于151的最大连接数限制来说可能太大,修改为500后此现象消失。
vi /etc/my.cnf #在mysqld下添加 max_connections = 500 sudo service mysqld restart