今天有兩臺服務器都出現了Can't create a new thread報錯。mysql
【故障處理過程】sql
故障發生後登陸服務器,檢查mysql進程正常,但登陸mysql報下面錯誤服務器
ERROR 1135 (HY000): 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。併發
重啓mysql服務,執行沒響應,kill -9 mysql進程,從errorlog中看到,停服務的命令因爲沒法建立新的thread致使執行失敗測試
【問題分析】操作系統
這個報錯不是mysql自己的問題,根本緣由是因爲操做系統CentOS 6.4 Linux 2.6.32 的max user processe的默認設置1024過小形成,當mysql線程數大於配置值時,就會出現Can't create a new thread報錯。線程
以其中一臺服務器爲例,操做系統版本是CentOS release 6.4(Linux version 2.6.32)3d
配置文件/etc/security/limits.d/90-nproc.conf的默認設置soft limit 是1024blog
這時mysql進程的Soft Limit也是1024進程
【問題重現】
在測試機器上將Max processes調整爲1024,模擬併發1024以上個線程請求,會出現一樣的報錯
動態修改mysql進程的系統資源限制後,報錯消失
echo -n "Max processes=2048:2048" > /proc/`pidof mysqld`/limits
【解決辦法】(針對CentOS 6.4 Linux version 2.6.32以上版本)
一、動態修改mysql進程的系統資源限制(不需重啓mysql服務便可生效)
echo -n "Max processes=65535:65535" > /proc/`pidof mysqld`/limits
二、修改/etc/security/limits.d/90-nproc.conf配置文件的配置(下次重啓mysql服務生效)
三、建議同時修改上面配置中用戶打開最大文件數的限制nofile