报错信息
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
排查
用Google,Baidu搜索,都将问题指向了系统的ulimit设置.
(详情,可自行搜索)
分析与总结
疑问
如何查看当前系统或某个进程的limit设置?
limit如何设置?
limit设置后,何时生效?
proc文件系统
首先说明一下/proc文件系统,可以借助该目录下的limits文件查看某个进程的ulimit限制情况.
执行ps -ef|grep mysql,得到MySQL的进程号.
root 57461 1 0 22:09 pts/4 00:00:00 /bin/sh /home/q/mysql/bin/mysqld_safe --defaults-extra-file=/etc/my_3306.cnf
mysql 58327 57461 0 22:09 pts/4 00:00:00 /home/q/mysql/bin/mysqld --defaults-extra-file=/etc/my_3306.cnf --basedir=/home/q/mysql
再根据进程号,查看ulimit的限制情况.
[lianjie.ning@vm01 ~]$ sudo cat /proc/57461/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 10485760 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 unlimited processes
Max open files 65535 65535 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 15841 15841 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
proc是什么
Linux版的ps和top命令都从/proc目录读取进程的状态信息,内核把有关系统状态的各种有意义的信息都放在这个伪目录里.
进程特有的信息都分别被放到了按PID起名字的子目录里.
ulimit命令
暂时认为该命令可以限制进程的资源使用情况.详细情况可参考man ulimit
配置文件
/etc/security/limits.conf (可配置系统默认的资源分配情况)
soft nofile 10240
hard nofile 40960
/etc/security/limits.d/90-nproc.conf (CentOS 6.2系统新增加的配置文件,可以指定用户可以使用的最大线程数.)
soft nproc 1024
3. 关于生效时间
修改上述两个配置文件,登录到root用户,可以用ulimit -a命令查看是否生效.
普通用户,则需要重启系统,或者直接在当前窗口指定,例如ulimit -u 65535,或者在/etc/profile,~/.bash_profile文件中指定.
例如:当前MySQL的最大线程数为1024,需要修改为65535.过程如下
a. 修改/etc/security/limits.d/90-nproc.conf配置文件
b. 用root用户重新登录
c. 查看ulimit –a,是否生效
d. 重启MySQL