解决方法:
1、检查服务器是否正常运行,如果服务器没有正常运行,则需要重启服务器。
2、检查服务器的系统资源,如内存、CPU等,确保服务器的系统资源充足,以支持更多的连接。
3、检查Linux系统的进程数限制,如果进程数限制过低,可以通过修改/etc/security/limits.conf文件来提高进程数的限制。
4、检查服务器的网络配置,如果服务器的网络配置不正确,可能会导致服务器无法接受连接。
这个可以通过修改 vi /etc/security/limits.conf 文件来设定:\x0d\x0a# vi /etc/security/limits.conf\x0d\x0avpsee hard nproc 32\x0d\x0a@student hard nproc 32\x0d\x0a@faculty hard nproc 64\x0d\x0a上面的配置文件意思是说限制 vpsee 这个用户只能 fork 32 个进程;然后限制 student 这个用户组的每个成员最多能 \x0d\x0afork 32 个进程;限制 faculty 这个用户组的每个成员最多能 fork 64 个进程。不过要事先检查系统是否有 \x0d\x0apam_limits.so 这个模块以及是否已经加载:\x0d\x0a# ls /lib64/security/pam_limits.so\x0d\x0a/lib64/security/pam_limits.so\x0d\x0a# vi /etc/pam.d/login\x0d\x0asession required pam_loginuid.so\x0d\x0a如果自己是 Linux 普通用户,不是 root 用户不能修改 limits.conf 和重启系统的话,可以用 ulimit \x0d\x0a来临时限制自己允许创建的进程数,ulimit 有 Hard 和 Soft 两种方法限制,用 Hard \x0d\x0a的话可以减少最大可用的进程数,但是就不能重新增大这个限制了;用 Soft 的话可以自己自由增大和减小限制(ulimit,-H 和 -S \x0d\x0a的详细说明可以参看 man ulimit)。不同的 Linux 版本对这个 ulimit -u 的默认值不同,在 CentOS \x0d\x0a上默认情况下最大运行进程数是 8256,在 Fedora 上是 \x0d\x0a1024,所以这个要看不同的发行版本,不过这个无所谓,反正可以改,不过改成32后就不能再改成比32更大的了(比如64),只能再改成比32小\x0d\x0a的,ulimit 不带 -H 和 -S 参数的时候同时设置 Hard 和 Soft:\x0d\x0a$ ulimit -u\x0d\x0a8256\x0d\x0a$ ulimit -u 32\x0d\x0a$ ulimit -u 64\x0d\x0a-bash: ulimit: max user processes: cannot modify limit: Operation not permitted\x0d\x0a$ ulimit -a\x0d\x0acore file size (blocks, -c) 0\x0d\x0adata seg size (kbytes, -d) unlimited\x0d\x0ascheduling priority (-e) 0\x0d\x0afile size (blocks, -f) unlimited\x0d\x0apending signals (-i) 8256\x0d\x0amax locked memory (kbytes, -l) 32\x0d\x0amax memory size (kbytes, -m) unlimited\x0d\x0aopen files (-n) 1024\x0d\x0apipe size (512 bytes, -p) 8\x0d\x0aPOSIX message queues (bytes, -q) 819200\x0d\x0areal-time priority (-r) 0\x0d\x0astack size (kbytes, -s) 10240\x0d\x0acpu time (seconds, -t) unlimited\x0d\x0amax user processes (-u) 32\x0d\x0avirtual memory (kbytes, -v) unlimited\x0d\x0afile locks (-x) unlimitedLinux下修改ulimit设置的最大进程数
最近在Linux服务器上发布应用时碰到一个如下的异常:
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:640)
初看可能会认为是系统的内存不足,如果这样想的话就被这段提示带到沟里面去了。
上面这段错误提示的本质是Linux *** 作系统无法创建更多进程,导致出错。因此要解决这个问题需要修改Linux允许创建更多的进程。
修改Linux最大进程数
我们可以通过ulimit -a来查看当前Linux系统的一些系统参数。
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62357
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size(512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
在上面这些参数中,通常我们关注得比较多的是一个进程可打开的最大文件数,即open files。系统允许创建的最大进程数量即是max user processes 这个参数。 我们可以使用 ulimit -u 4096 修改max user processes的值,但是只能在当前终端的这个session里面生效,重新登录后仍然是使用系统默认值。
正确的修改方式是修改/etc/security/limits.d/90-nproc.conf文件中的值。先看一下这个文件包含什么:
$ cat /etc/security/limits.d/90-nproc.conf
我们只要修改上面文件中的4096这个值,即可。
相关阅读:
关于RHEL6中ulimit的nproc限制 http://www.linuxidc.com/Linux/2012-12/76255.htm
Linux/Unix ulimit命令详解 http://www.linuxidc.com/Linux/2012-10/72782.htm
Linux 文件系统限制ulimit用法 http://www.linuxidc.com/Linux/2012-06/63451.htm
Linux认证辅导:Linux ulimit命令 http://www.linuxidc.com/Linux/2011-06/37269.htm
Linux主机通过 ulimit 改善系统性能 http://www.linuxidc.com/Linux/2011-03/33121.htm
通过 ulimit 改善Linux系统性能 http://www.linuxidc.com/Linux/2009-11/23109.htm
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)