Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93119
  • 博文数量: 15
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-08 16:28
文章分类

全部博文(15)

文章存档

2013年(15)

我的朋友

分类: LINUX

2013-01-10 14:56:04

今天在用apache账号登录java应用的几台虚拟机时,报错:
The server has disconnected with an error. Server message reads: A protocol error occurred.
fork failed: Resource temporarily unavailable

登录root
su apache
报错:
su: cannot set user id: 资源暂时不可用

以前也遇到过这种问题,apache账号突然不可用。当时找的原因是系统进程太多,kill几个进程就可以了。
根本原因是:
linux操作系统默认最大允许进程数是1024. 随着应用的增加,我们的需求已超过了1024

曾经改过nproc配置:
cat >> /etc/security/limits.conf << EOF
*           soft   nofile       65535
*           hard   nofile       65535
EOF

据说这个更改只是增加了读文件的句柄数。并未真正增加最大允许进程中。
我们所使用的是lxc虚拟机,共享宿主机资源。今天某个lxc上的java增加了20个线程(
Java里面的一个线程在Linux下会最终映射成操作系统的一个进程),导致宿主机进程数超过1024。
解决方法:在宿主机和每一台虚拟机上修改文件
[root@vm]# vim /etc/security/limits.d/90-nproc.conf
   *          soft    nproc     1024        (改成4096)

然后重启java服务。
问题解决。

用ulimit -u -n -a 查看相关信息
阅读(15900) | 评论(1) | 转发(0) |
1

上一篇:没有了

下一篇:今天遇到的mysql权限更改问题

给主人留下些什么吧!~~

Triplerabbit2013-03-25 17:56:48

long rabbit同学总结得很好啊,顶一下