Valgrind使我的所有程序的线程都在睡觉

时间:2012-04-02 18:01:18

标签: multithreading sleep valgrind

操作系统/环境信息:

plee@sos-build:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:        11.10
Codename:       oneiric
plee@sos-build:~$ uname -a
Linux sos-build 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

我正在开发一个服务器端项目。

我对这个项目有几个问题:

  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
  3. 我被建议使用Valgrind找出问题所在(特别是第一期)。所以我正在使用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
    

    所以任何想法?感谢。

    彼得

1 个答案:

答案 0 :(得分:0)

正如David Schwartz所说,

  

目前尚不清楚为什么这是一个问题

他是对的。我做了一个简单的测试:我创建了另一个单独的客户端,让它连接到服务器,向服务器发送命令,并从服务器获得响应。所以服务器状况良好。

这意味着,负载测试存在一些问题。它只是停止向服务器发送客户端命令。

我的一位同事用Java编写了这部分内容(而我的服务器是用C ++ / Boost编写的)。我需要查看他的代码。这将花费很多时间。

一旦我从负载测试代码中找到了一些东西,我就会回到这里。