我正在開發一個需要創建和刪除大量線程的軟件。關於linux內存問題的C++多線程程序
當我創建一個線程時,內存會增加,刪除它時(通過使用命令ps -mo THREAD -p <pid>
來確認),與程序/軟件相關的內存不會減少(頂部命令)。結果,我用完了內存。
我已經使用Valgrind檢查內存錯誤/泄漏,我找不到任何。這是在一個debian盒子上。請讓我知道問題可能是什麼。
我正在開發一個需要創建和刪除大量線程的軟件。關於linux內存問題的C++多線程程序
當我創建一個線程時,內存會增加,刪除它時(通過使用命令ps -mo THREAD -p <pid>
來確認),與程序/軟件相關的內存不會減少(頂部命令)。結果,我用完了內存。
我已經使用Valgrind檢查內存錯誤/泄漏,我找不到任何。這是在一個debian盒子上。請讓我知道問題可能是什麼。
你是如何刪除線程? 這裏的筆記http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_join.3.html談到在某些情況下需要調用加入來釋放資源。
識別調用加入沒有做的伎倆,但調用pthread_detach()工作。謝謝 – user883275 2012-08-08 22:17:40
如果你正在不斷創建和刪除大量的線程,你可能會考慮使用線程池來代替......我必須知道如果這適用於你的應用程序,雖然 – jcoder 2012-08-09 09:22:03
是真的。目前我正在使用線程池。但我擁有大量不斷變化的小型游泳池。調查是否會導致性能問題,如果是,那麼會考慮改變設計。 – user883275 2012-08-09 10:30:13
您不會耗盡內存。
您在頂層命令中看到的「空閒內存」實際上不是在需要時可用的內存。 Linux內核儘可能使用/使用可用內存作爲頁面緩存。當進程需要內存時,內核可以丟棄該頁面緩存並將該內存提供給進程。
換句話說:Linux使用的空閒內存,而不是隻留空轉周圍...
使用free -m
:在標行「 -/+緩衝區/緩存:」你會看到真正的量的內存可用於進程。
你如何理解,你內存不足?由於內存不足,使用'free -m'或程序崩潰? – 2012-08-08 11:04:05
程序崩潰之前,可以通過頂部命令 – user883275 2012-08-09 14:44:50