天天看點

一個普通ERROR 1135 (HY000)錯誤引發的血案:

一個普通ERROR 1135 (HY000)錯誤引發的血案:

今天接到測試人員反應,測試環境前端應用程式無連接配接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

第一反應感覺可能是跟ulimit限制連接配接數有關,檔案描述符不夠用。接下來檢查配置件 /etc/security/limits.conf 相關結果如下:

#for root

root soft nofile 65535

root hard nofile 65535

# End of file

mysql soft nproc 65536

mysql hard nproc 65536

mysql soft nofile 65535

mysql hard nofile 65535

配置沒有問題,mysql的ulimit限制已經打開。

但是,執行如下指令:

# sudo -u root bash -c " ulimit -a "

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 62591

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 1024

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

發現max user processes值仍為1024.

而在Centos5裡面,隻須在/etc/security/limits.conf添加如下兩行:

root soft nofile 65535 

對應的uilmit  -u 就會是65535.

後來猜想centos6的使用者的ulimit限制是不是還有其他的配置檔案做相關的限制呢?果不其然,發現在 /etc/security/limits.d/目錄下,有一個名為:90-nproc.conf的配置檔案,

打開看看什麼内容:

[root@fztest ~]# cat /etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

* soft nproc 1024

而在配置檔案/etc/security/limits.d/90-nproc.conf中的 “* soft nproc 1024”的意思是任何使用者的最大max user processes為1024個,也就是說,系統的任何使用者均不可以通過ulimit -u來修改 。真的是這樣嗎?我們來進行如下驗證操作:

[oracle@fztest ~]$ ulimit -u 65535

-bash: ulimit: max user processes: cannot modify limit: Operation not permitted

[root@fztest ~]# ulimit -u 65535

[root@fztest ~]# ulimit -u 

65535

由以上操作,可知事實上這個限制是對除root以外的普通使用者進行的限制,root可以通過ulimit -u 65535來進行即時修改,隻對目前會話生效。一旦重新開機伺服器,便會失效(重新恢複max user processes  -u 1024)。

接下來,嘗試通過修改這個配置檔案,來驗證max user processes的值是否會改變。

将/etc/security/limits.d/90-nproc.conf中的1024修改為65535後,執行如下指令:

[root@fztest ~]# sudo -u root bash -c " ulimit -a" 

pending signals (-i) 95191

open files (-n) 65535

max user processes (-u) 65535

由此可見,修改生效。如果不想修改/etc/security/limits.d/90-nproc.conf這個檔案,也可以将此限制添加到/etc/rc.local檔案中,讓其開機應用生效即可。

成功修改了root使用者的max user processes後,繼續使用root使用者啟動mysqld_safe腳本,穩定運作了一個上午,一切正常。 至此,ERROR 1135 (HY000): Can’t create a new thread (errno 11)這個問題總算告以段落。

     本文轉自vcdog 51CTO部落格,原文連結:http://blog.51cto.com/255361/1054204,如需轉載請自行聯系原作者