最近的測試需要很長的連接server。這些數據需要達到100W長連接,試client。一個線程來保持連接。查找linuxserver創建者默認3200當多個線程。這個錯誤將得到“java.lang.OutOfMemoryError: unable to create new native thread。並且,此時整個系統都不能創新新的線程了,不能連接終端,不能運行不論什么命令。
貌似是內存不足。但實際內存尚有富余。經驗證。是linux的一些內核參數限制了創建新的線程。
由於要保持長連接。全部先改動client保證更大的分配port范圍
改動 /etc/sysctl.conf
加入這樣一行:
net.ipv4.ip_local_port_range = 1024 61000
改動系統參數
echo "100000" > /proc/sys/kernel/threads-max |
echo "100000" > /proc/sys/kernel/pid_max (默認32768) |
echo "200000" > /proc/sys/vm/max_map_count (默認65530) |
改動/etc/security/limits.conf
*
- nproc 999999
* - nofile 999999
* - nofile 999999
PS:nproc是改動系統的max user processes大小;nofile 是改動open files的大小。另外linux 2.6.25內核之前有個宏定義,定義了這個值的最大值,為1024*1024,正好是100萬,而在2.6.25內核及其之后。這個值是能夠通過/proc/sys/fs/nr_open來設置,只是,999999足夠用了。
非常多人可能會遇到。僅僅能啟動32000多個線程就不能再起很多其它的線程了,事實上就是pid_max = 32768 給限制住了
版權聲明:本文博主原創文章,博客,未經同意不得轉載。