2017-10-04 66 views
0

我有我的Debian機器上創建活動線程的指定金額的程序。當我試圖創造超過100什麼我得到一個錯誤說:「在創建線程錯誤」,當它到達的OS限制,機器不接受任何傳入連接和執行命令時,我得到「-bash:叉:無法分配內存」 。看看頂部的命令,我發現任務在32564時達到最大,只有20%的RAM正在被使用。我嘗試編輯ulimit -a & -n到500000和-s到81920,但仍然沒有做任何事情。任何幫助是極大的讚賞/。暗戰線程在Debian

+1

你爲什麼不增加用戶進程的最大數量('的ulimit -u')? – myaut

+1

可能是一些[PAM](https://en.wikipedia.org/wiki/Pluggable_authentication_module)限制。看看'/etc/security/limits.conf'etc)。然而,創建100 * runnable *線程是不合理的,除非你有一個昂貴的多插槽服務器。 –

+0

你真的*需要超過100個線程嗎?請記住,操作系統仍然需要將這些線程與其他線程交換。除非您可以告訴操作系統在單獨的核心上執行線程,否則它仍然需要將線程與其他進程交換。 –

回答

0

從我自己的經驗,使用線程一個好的經驗法則爲CPU密集型的進程,提高性能時是使用相同數量的線程爲核心,除了在超線程系統的情況下,在這種情況下,一個應使用兩倍的內核。可以得出的另一個經驗法則是I/O綁定的過程。這個規則是將每個內核的數量線程翻兩番,除了超線程系統的情況外,那麼可以使每個內核的線程數量增加四倍。所以你可能不應該使100線程無論如何。只要做到「足夠」。