OS /環境情報を眠れる森の私のプログラムのすべてのスレッドを作成します。Valgrindのは
私はこのプロジェクトで、いくつかの問題があります:私は(特に最初の問題のために)問題がどこにあるか見つけるために、Valgrindのを使用することが提案された
- boost::weak_ptr<T>.lock() Crashes with a SIGSEGV Segmentation Fault
- pthread_mutex_lock __pthread_mutex_lock_full: Assertion failed with robust and 0x4000000
を。私はValgrindを使用しています。
valgrind --leak-check=full --gen-suppressions=all --suppressions=valgrind_suppressions.supp MyServerSideProgram arg1 arg2 arg3 arg4
私のプログラムが同時に実行されている13個のスレッドを持っています。最初はうまくいっています。残念ながら、一定の時間が経過すると、すべてのスレッドがスリープ状態になります。
私はすべてのスレッドの状態を確認するために使用するコマンド: top -H -p [MyServerSideProgram's PID]
そして結果は次のとおりです。
top - 11:54:34 up 46 days, 22:30, 4 users, load average: 0.02, 0.02, 0.05
Tasks: 13 total, 0 running, 13 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.5%us, 0.1%sy, 0.0%ni, 99.2%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 9224140k total, 8135872k used, 1088268k free, 294988k buffers
Swap: 9431164k total, 424416k used, 9006748k free, 4973316k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8744 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:06.81 memcheck-amd64-
8747 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:42.27 memcheck-amd64-
8748 plee 20 0 1379m 1.2g 6276 S 0 13.7 30:58.15 memcheck-amd64-
8749 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:53.62 memcheck-amd64-
8750 plee 20 0 1379m 1.2g 6276 S 0 13.7 30:58.68 memcheck-amd64-
8751 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:31.65 memcheck-amd64-
8752 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:24.63 memcheck-amd64-
8753 plee 20 0 1379m 1.2g 6276 S 0 13.7 32:05.33 memcheck-amd64-
8754 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:52.24 memcheck-amd64-
8755 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:11.69 memcheck-amd64-
8756 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:17.10 memcheck-amd64-
8757 plee 20 0 1379m 1.2g 6276 S 0 13.7 31:54.65 memcheck-amd64-
8758 plee 20 0 1379m 1.2g 6276 S 0 13.7 32:10.67 memcheck-amd64-
私はman top
チェック:だから
w: S -- Process Status
The status of the task which can be one of:
'D' = uninterruptible sleep
'R' = running
'S' = sleeping
'T' = traced or stopped
'Z' = zombie
任意のアイデアに?ありがとう。ピーター
これがなぜ問題なのかはっきりしません。あなたのコードについては私たちにはあまり教えてくれませんが、ほとんどのスレッドが作業を待っています。 'gdb'を使ってプロセスにアタッチし、スレッドが何をしているのかを見ることができます。 'thread apply all where'コマンドが役に立つかもしれません。 –