我正在管理一个服务器托管的应用程序,用户面临以下错误:
java.lang.OutOfMemoryError:无法创建新的本机线程
我搜索了一下,发现可能是没有针对请求的线程的问题,但我发现服务器没有问题,如下所示的内存状态和 CPU 状态:
free -m #Memory status
total used free shared buffers cached
Mem: 10103 2946 7156 0 25 88
-/+ buffers/cache: 2832 7270
Swap: 1906 26 1880
# df -h #Disk status
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 217G 172G 34G 84% /
udev 5.0G 4.0K 5.0G 1% /dev
tmpfs 2.0G 264K 2.0G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 5.0G 0 5.0G 0% /run/shm
/dev/sda1 189M 33M 146M 19% /boot
这是处理器状态信息:
# ps aux | wc -l #Number of Running Processes
92
# ulimit -a | grep "max user" #Maximum allowed Users Processes
max user processes (-u) 80711
# ps axms | wc -l #Number of Running Threads
376
# cat /proc/sys/kernel/threads-max #Maximum allowed Number of Threads
161422
这是 TOP 输出,显示 Java 服务占用 3G 作为虚拟内存,占用 2.5G 作为常驻内存大小: