Chinaunix首页 | 论坛 | 博客
  • 博客访问: 252241
  • 博文数量: 103
  • 博客积分: 54
  • 博客等级: 民兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 11:36
文章分类

全部博文(103)

文章存档

2016年(4)

2015年(91)

2014年(3)

2012年(5)

我的朋友

分类: LINUX

2015-11-18 08:09:08

  • 报错信息
  • 排查
  • 分析与总结
    • 疑问
    • proc文件系统
    • ulimit命令
  • 参考

报错信息

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设置.
(
详情,可自行搜索)

分析与总结

疑问

  1. 如何查看当前系统或某个进程的limit设置?
  2. limit如何设置?
  3. limit设置后,何时生效?

proc文件系统

首先说明一下/proc文件系统,可以借助该目录下的limits文件查看某个进程的ulimit限制情况.

  1. 执行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

  1. 再根据进程号,查看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

  1. proc是什么
    Linux
    版的pstop命令都从/proc目录读取进程的状态信息,内核把有关系统状态的各种有意义的信息都放在这个伪目录里.
    进程特有的信息都分别被放到了按PID起名字的子目录里.

ulimit命令

  1. 暂时认为该命令可以限制进程的资源使用情况.详细情况可参考man ulimit
  2. 配置文件
    /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

参考

http://dimitrik.free.fr/blog/archives/2010/11/mysql-performance-hitting-error-cant-create-a-new-thread-errno-11-on-a-high-number-of-connections.html

 

阅读(1297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~