【原創】MySQL Can't create a new thread報錯分析

今天有兩臺服務器都出現了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

 

 

相關文章
相關標籤/搜索