2012-04-02 17 views
0

OS /環境情報を眠れる森の私のプログラムのすべてのスレッドを作成します。Valgrindのは

私はこのプロジェクトで、いくつかの問題があります:私は(特に最初の問題のために)問題がどこにあるか見つけるために、Valgrindのを使用することが提案された

  1. boost::weak_ptr<T>.lock() Crashes with a SIGSEGV Segmentation Fault
  2. 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 

任意のアイデアに?ありがとう。ピーター

+0

これがなぜ問題なのかはっきりしません。あなたのコードについては私たちにはあまり教えてくれませんが、ほとんどのスレッドが作業を待っています。 'gdb'を使ってプロセスにアタッチし、スレッドが何をしているのかを見ることができます。 'thread apply all where'コマンドが役に立つかもしれません。 –

答えて

0

デビッド・シュワルツが言ったように

、これが問題

彼は右である理由、それは明らかではない

。私は簡単なテストをしました。別の別のクライアントを作成し、サーバーに接続し、サーバーにコマンドを送信し、サーバーから応答を得ました。したがって、サーバーの状態は良好です。

つまり、負荷テストにはいくつか問題があります。サーバーへのクライアントコマンドの送信を停止するだけです。

私の同僚の一人がJavaでこの部分を書いていました(私のサーバはC++/Boostで書かれています)。私は彼のコードを見る必要があります。それは多くの時間がかかるでしょう。

負荷テストコードから何かを見つけたら、ここに戻ってきます。

+0

'私は彼のコードを見る必要があります。それは私の人生の話です。(( –