多数のスレッドの作成と削除が必要なソフトウェアを開発しています。
スレッドを作成するとメモリが増加し、削除すると(コマンドで確認ps -mo THREAD -p <pid>
)、プログラム/ソフトウェアに関連するメモリが減少しません(topコマンド)。その結果、メモリが不足しました。
Valgrindを使用してメモリエラー/リークをチェックしましたが、見つかりません。これはDebianボックスにあります。問題が何であるかを教えてください。
多数のスレッドの作成と削除が必要なソフトウェアを開発しています。
スレッドを作成するとメモリが増加し、削除すると(コマンドで確認ps -mo THREAD -p <pid>
)、プログラム/ソフトウェアに関連するメモリが減少しません(topコマンド)。その結果、メモリが不足しました。
Valgrindを使用してメモリエラー/リークをチェックしましたが、見つかりません。これはDebianボックスにあります。問題が何であるかを教えてください。
メモリが不足することはありません。
topコマンドに表示される「空きメモリ」は、実際には必要なときに使用できるメモリではありません。Linuxカーネルは、ページキャッシュに可能な限り/使用可能な空きメモリを使用します。プロセスがメモリを必要とする場合、カーネルはそのページキャッシュを破棄し、そのメモリをプロセスに提供できます。
言い換えれば、Linuxはただアイドリング状態のままにするのではなく、空きメモリを使用します...
使用free -m
:「-/ + buffers / cache:」というラベルの付いた行に、プロセスで使用可能な実際のメモリ量が表示されます。
スレッドをどのように削除しますか?ここにあるメモhttp://www.kernel.org/doc/man-pages/online/pages/man3/pthread_join.3.htmlは、リソースを解放するために、場合によってはjoinを呼び出す必要があることについて説明しています。