當大型的應用需要建立幾十萬的執行緒時,需要修改linux的系統值,以支援這樣的應用,相關的引數調整為:
1.ulimit 的引數調整
ulimit -s
ulimit -u
ulimit -n
可以修改/etc/security/limits.conf檔案,使其永久生效
2.調整控制代碼數
/proc/sys/kernel/pid_max
/proc/sys/kernel/threads-max
/proc/sys/vm/max_map_count
/proc/sys/fs/file-max
注:max_map_count
max_map_count檔案包含限制乙個程序可以擁有的vma(虛擬記憶體區域)的數量。虛擬記憶體區域是乙個連續的虛擬位址空間區域。在程序的生命週期中,每當程式嘗試在記憶體中對映檔案,鏈結到共享記憶體段,或者分配堆空間的時候,這些區域將被建立。調優這個值將限制程序可擁有vma的數量。限制乙個程序擁有vma的總數可能導致應用程式出錯,因為當程序達到了vma上線但又只能釋放少量的記憶體給其他的核心程序使用時,作業系統會丟擲記憶體不足的錯誤。如果你的作業系統在normal區域僅占用少量的記憶體,那麼調低這個值可以幫助釋放記憶體給核心用。
這個值太小,建立執行緒過多,會出現錯誤:
fork: cannot allocate memory
syctrl -a
修改/etc/sysctl.conf
sysctl -p
3.如果使用了tcp連線,需要修改埠範圍
net.ipv4.ip_local_port_range
tcp協議的埠限制,乙個程序最多建立6萬多的連線。
Linux執行緒(程序)數限制
目錄 toc o 1 3 h z u linux執行緒 程序 數限制 pageref toc447043843 h 1 目錄.pageref toc447043844 h 2 1.問題 pageref toc447043845 h 2 2.初步原因分析和解決 pageref toc447043846...
Linux最大執行緒數限制
開始以為是記憶體不足導致無法建立執行緒,把jvm的 xms,xmx的2個引數都加大一倍 xms2048m xmx2048m。把 xss引數調小,還是啟動失敗。應該是系統方面的限制了,這台機器上搞了100個過tomcat程序,還有不少其他軟體,東西比較多且雜。確認過機器的記憶體還是足夠的,先排查系統引...
c semaphoreSlim限制執行緒數
我們在使用執行緒的時候,如果多個執行緒數去訪問乙個資源的時候,那麼是非常影響程式的執行的,因為如果有寫的操作,那麼需要寫鎖,那麼執行緒都會堵在同乙個地方,那麼我們可以限制一下訪問乙個資源的執行緒數。static semaphoreslim semaphore new semaphoreslim 4 ...