Linux ulimit和動態修改MySQL最大線程數限制
ulimit是限制進程對資源的使用,根據摩爾定律,高配的硬件現下也差不多白菜價
但軟件資源限制變化不大,特別是process/file,分別對應nproc和nofile
nproc可用 ulimit -u 查詢;nofile可用 ulimit -n 查詢
這裡提一點,自內核2.6.32之後,引入/etc/security/limits.d/90-nproc.conf
這就意味/etc/security/limits.d/裡面的文件的配置會覆蓋/etc/security/limits.conf的配置
大都數軟硬限制的配置文件都位於:/etc/security/limits.conf
給個例子,比如修改fd(文件句柄)限制
* soft nofile NNNNN
* hard nofile NNNNN
確認修改:ulimit -Hn;ulimit -Sn
有個朋友在生產環境遇到如下一個問題:
[plain]
各位大師,求助:有沒有辦法, 不重啟 數據庫的情況下, 修改 mysql 用戶 最大的 nproc 這個參數!
報錯信息:Can't create a new thread (errno 11);
當然項目初期肯定會 修改 系統的ulimit,程序的連接數等等;
但這個是在應急情況下: 目前解決的方式是:
1、iptables 禁用某個ip連接
2、tcpkill 殺掉沒用的tcp 連接, 這樣連接上mysql 之後,修改 max_connection < nproc 這個參數;
有沒有 在 不重啟數據庫,又能修改mysql 用戶最大的 nproc !
在設置MySQL的參數max_connections之外, 還需要考慮設置/etc/security/limits.conf文件的大小
MySQL是線程模式執行的, 其線程數也會被統計在nproc中, 這可能掩蓋或造成對此問題的誤判
處理方法:從Linux 2.6.32開始可以使用
echo -n "Max processes=204800:204800" > /proc/`pidof mysqld`/limits
來動態修改進程的系統資源limits信息,不用再因為修改這個而去重啟實例
這個方法可以解決遇到的MySQL最大進程數,非常簡單方便