当前位置: 代码迷 >> MySQL >> 因ulimit设立导致的MySQL故障
  详细解决方案

因ulimit设立导致的MySQL故障

热度:251   发布时间:2016-05-05 16:34:10.0
因ulimit设置导致的MySQL故障

报错信息

?

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的限制情况.

[[email protected] ~]$ 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

  相关解决方案