linux動態修改 max user processes limits

jx_yu發表於2016-01-19

MySQL資料庫 連線出現以下異常:
ERROR 1135 (HY0000):?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

 

?以上是OS層面的max processes不夠導致的,透過以下實驗可以重現此異常:

#設定mysql最大連線數1024  作業系統的Max process1024

?clip_image002

clip_image004

#使用如下方法模擬100個連線到mysql

~]# cat conn.sh

#!/bin/bash

for i in {1..1024}

do

mysql -uroot –p123456 -h 127.0.0.1 -e "select sleep(1000)" &

done

 

sh conn.sh

執行此指令碼,稍後出現如下報錯

clip_image006

此時檢視mysql中的連線數

clip_image008

我們知道max connections1024 但到了975個連線的時候,再次連線就會報Can’t create a new thread (errno 11)的錯誤

從 OS kernel 2.6.32 開始
動態修改mysql程式的limits引數,可以使用如下方式:

echo -n ‘Max processes=SOFT_LIMITS:HARD_LIMITS’ > /proc/`pidof mysqld`/limits
透過如上命令就可以動態調整已經存在的mysqldprocesses限制了。

 

例如,在此實驗環境中,作業系統資訊如下:

~]# uname -r

2.6.32-131.0.15.el6.x86_64

~]# echo -n "Max processes=10240:10240" > /proc/12946/limits

clip_image010

發現mysql程式對應的limit引數已經動態變成10240,此時再次模擬多個連線到mysql

clip_image012

clip_image014

此時,丟擲的異常是過多的連線了 而不再是:?Can’t create a new thread (errno 11)

 

綜上,資料庫伺服器的max process limit需要調整,至少要保證資料庫的max connections小於它,如果已經執行的mysql遇到此問題,而實際真的需要增大max connections時,可以透過echo -n ‘Max processes=SOFT_LIMITS:HARD_LIMITS’ > /proc/`pidof mysqld`/limits 方式來動態調整正在執行的mysqllimits引數,從而避免重啟資料庫的操作

參考https://www.percona.com/blog/2013/02/04/cant_create_thread_errno_11/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27000195/viewspace-1979138/,如需轉載,請註明出處,否則將追究法律責任。

相關文章