现象描述:
今天有人反应点击网站相关链接无反应,在连接数据库时出现提示如下:
mysql error: Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
通过google了解到是由于用户线程达到 max user processes导致,但是通过ulimit -a
发现max user processes 127372 和其他正常的服务器都一样,是什么原因导致的呢?
1.pidof mysqld 查询mysql实例都有哪些进程
2.cat /proc/28571/limits
红框出:原来为1024 ,出错的实例都是由于Soft Limit 达到1024,若关闭一些连接,数据库仍会继续运行,但问题并没有解决。
解决方案:
1.vi /etc/security/limits.d/90-nproc.conf
#修改为:
* nproc 127372
更改后需要重启数据库实例
2.动态修改进程的系统资源limits
echo -n "Max processes=204800:204800" > /proc/`pidof mysqld`/limits
如:echo -n "Max processes=127372:127372" > /proc/28571/limits
此方法不用重启数据库实例
普及:
1.自内核2.6.32之后,引入/etc/security/limits.d/90-nproc.conf,这就意味/etc/security/limits.d/里面的文件的配置会覆盖/etc/security/limits.conf的配置
2.快速修改:
文件句柄
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
最大线程数
sed -i '/nproc/s/soft/-/' /etc/security/limits.d/90-nproc.conf
sed -i '/nproc/s/1024/65535/' /etc/security/limits.d/90-nproc.conf
至于为何会出现这种问题,请看下此链接:http://www.cnblogs.com/billyxp/archive/2013/04/03/2998079.html