Articles of strace的

达到MaxClients时的Apache超时/死锁

我使用mod_php(PHP 5.3)在Debian Squeeze上运行Apache 2.2,执行MPM,在多个端口(使用同一台机器运行memcached)上侦听。 在过去的6个星期左右,我遇到了所有Apache连接超时/死锁的情况。 重新启动Apache将解决这个问题,在几个小时之间的某个地方。 在服务器上运行的PHP应用程序除了在同一台计算机的单独端口上运行后端REST API之外,还包括一个面向用户的Web UI。 Web UI应用程序通过http://127.0.0.1:8888/在大多数页面加载上向后端API发送1到3个连续的REST请求。 这些超时错误首先在PHP的错误日志中被注意到,因为30秒之后REST客户端的超时错误。 匹配超时也可以在Apache的错误日志中看到。 它们以突发forms出现,所有请求都将超时,然后一批请求将迅速而成功地处理(看起来),然后是另一批超时。 在几分钟的时间窗口内,8-25秒将只是超时,随后可能是一秒钟的请求正在被处理,接着超过8-25秒的超时。 如果“请求突发”之前的“超时窗口”较短,则后面的一个会更长。 当这个问题出现的时候,任何应用程序中的curl http://localhost/server-status或者curl请求都会返回到一个PHP脚本,或者超时或者失败,或者有时会返回25到60秒。 在此期间,CPU可用,RAM可用,IO显示正常(虽然这是我不擅长监视的一件事),并且SYN_RECV状态下的套接字数量远低于系统的somaxconn和Apache的ListenBacklog (但是我确实看到在积压中等待的sockets)。 在debugging和研究过程中,我注意到很多事情是没有意义的。 首先,在我上面的curl http://localhost/server-status示例中, curl成功连接和发送数据,但从来没有得到响应。 即使经过了45分钟以上,Apache似乎也没有重置连接或任何东西, curl只是挂起和等待。 例如: ~# curl -vv http://localhost/server-status * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1… connected * Connected to localhost (127.0.0.1) port 80 (#0) > GET /server-status […]

这pid用来strace我的Apache

我的apache2正在使用缓慢运行。 一个PHP文件需要很长的时间来处理。 服务器是活的。 我不想重新启动它。 所以我认为我strace它并检查发生了什么。 所以我跑了 strace -p `cat /var/run/apache2.pid ` 之后,我加载了一些testingurl。 加载多次。 但是我没有在strace控制台上看到任何输出! 然后我记得有很多subprocess。 所以我检查了他们 $ ps ax | grep apache[2] -i 1877 ? Ss 0:02 /usr/sbin/apache2 -k start 2006 ? S 0:00 /usr/sbin/apache2 -k start 2007 ? S 0:00 /usr/sbin/apache2 -k start 2008 ? S 0:00 /usr/sbin/apache2 -k start 2009 ? S 0:00 […]

木偶挂在rt_sigprocmask(SIG_BLOCK,NULL,,8)= 0

在我们的设置中,我们使用木偶pipe理我们的服务器。 几天后,我看到傀儡客户运行非常缓慢。 当傀儡的过程中,我得到的负载 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) […]

mongodb神秘崩溃与sigkill下strace

我有一个似乎每天大概崩溃一次的mongodb实例。 我在mongo日志文件中没有看到任何有用的信息。 一切都很好,然后这个过程只是坠毁,没有附加的信息logging。 我在strace下运行它,希望得到一些有用的线索,直到它崩溃,并得到这个输出: Wed Apr 17 10:56:39.340 [conn172] M/R: (1/3) Emit Progress: 2800/4351 64% Wed Apr 17 10:57:16.696 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 16ms Wed Apr 17 10:57:17.035 [PeriodicTask::Runner] task: WriteBackManager::cleaner took: 17ms Wed Apr 17 10:57:17.429 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 79ms +++ killed by SIGKILL +++ 这只发生在一个特定的虚拟机上,其余的都很好。 还检查每小时/每日cron工作,以防万一有些事情正在发生并杀死mongod,但没有嫌疑人在那里。 操作系统 :Ubuntu 12.04.2 Mongo :2.4.1 还有什么我可以做进一步的疑难解答?

过程在正常情况下正常工作

我有一个进程 – 一个perl脚本 – 这样做: while true check a POP account on a server on the lan process any email found write logs – messages found, actions taken, errors sleep for 15 seconds 它运行在一个Redhat 7.3服务器上(我inheritance了它,我不喜欢那个盒子的年代)。 它运行在/ etc / inittab中,如下所示: spop:2345:respawn:/usr/local/gw/bin/popdmn 如果死了,init重新启动它。 在过去的几天里,这个过程将不再起作用, 除非它是有条理的。 当它刚刚运行时,它从不login到pop服务器。 一旦它被束紧(通过“strace -Ff -p cat /usr/local/gw/var/popdmn.pid ”),它就可以完美地工作。 作为一个解决方法,我正在运行strace服务器上运行的屏幕。 显然这不是理想的。 为什么一个过程会这样做? 我从来没有见过这种情况发生过。

当磁盘处于只读状态时,如何分析系统调用,strace输出是“总线错误”?

我们有硬盘的问题,使所有的挂载点只能读取。 dmesg输出: end_request: I/O error, dev sda, sector 15574609 sd 0:0:0:0: SCSI error: return code = 0x00040000 我们要分析一个正在运行的程序,因为当他不能写入文件系统时它应该死掉。 所以,我们想用strace来debugging系统调用。 但strace的输出是: Bus error 似乎一些资源不可用的机器或一些低级别的错误。 在系统pipe理员修复磁盘之前,我被困在如何分析程序的问题上。

什么可能导致strace结果重复mmap / munmap?

我有一个(node.js)应用程序偶尔会导致100%的CPU使用率。 当它处于这种状态时,我使用strace来附加进程 – 但是我不知道如果输出strace,该怎么办。 结果在这两种模式之间重复(缩短): mmap(0x30c3ac700000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x30c3ac700000 mmap(0x3364514ba000, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x3364514ba000 munmap(0x3364514ba000, 286720) = 0 munmap(0x336451600000, 761856) = 0 mmap(0x336451500000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x336451500000 mmap(0x2b9c33880000, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x2b9c33880000 munmap(0x2b9c33880000, 524288) = 0 munmap(0x2b9c33a00000, 524288) = 0 … 和… […]

无法在strace下运行程序

我试图在strace下运行这个简单的程序,它不会让我。 你们能想到为什么会这样吗? [jeffjose@skipper ~]$ strace ls strace: ptrace(PTRACE_TRACEME, …): Permission denied 我在Fedora 17b上,我的shell是tcsh 。 如果需要,我可以提供更多信息。 更新:克里斯托弗指出,这有一个错误报告。 他还build议我调整selinux或禁用它。 这是唯一的方法吗? 这是什么意思? 如果我这样做,我在做什么? 有人能详细解答吗? 我会select这个作为我的查询的正确答案。 谢谢! 更新2:我正在使用gdb进行一些debugging,并再次提出。 对我来说幸运的是,在那里清楚地提到了需要做的事情。 warning: the SELinux boolean 'deny_ptrace' is enabled, you can disable this process attach protection by: (gdb) shell sudo setsebool deny_ptrace=0 我能够毫无困难地做好准备。 但是,这是什么意思? 我刚刚做了什么?

当strace附加到进程时,nscd工作

我有一个服务器,我正在运行nslcd查询AD服务器,并将其用于授权,这是按预期工作。 现在,我引入了nscd来减lessAD服务器上的负载。 结果有点奇怪。 如果我正常运行nscd进程(作为nscd用户甚至root用户),守护进程不会返回任何结果。 [root@ldap-auth-test ~]# id testuser1 id: testuser: No such user 现在,看看为什么它不起作用,我试图把这个过程搞定。 strace -p 8327 -f -s 1000 同时,我又在testuser1上做了一个id。 这次, [root@ldap-auth-test ~]# id testuser1 uid=10004(testuser1) gid=10046(A-TESTGROUP1) groups=10046(A-TESTGROUP1) context=root:system_r:unconfined_t:SystemLow-SystemHigh 我多次尝试,看看这是否是巧合,并观察到它不是。 我试图不附加到线程,并可以看到,nscd不工作时,我不附加到线程。 任何帮助是极大的赞赏。 [root@ldap-auth-test ~]# lsb_release -a LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch Distributor ID: CentOS Description: CentOS release 5.5 (Final) Release: 5.5 Codename: Final PS:我也问过Stackoverflow ,因为我不知道在哪里问。 如果有人能指出哪一个是我的,我会删除不相关的。 […]

长页面加载 – DNS查询问题?

我注意到我的Web服务器最近需要很长时间来加载页面。 使用Firebug,我意识到DNS查找需要大约4秒的时间: Connecting: 304ms Sending: 0ms Waiting: 3.45s Receiving: 0ms 我认为这是等待HTTP响应的很长一段时间。 在命令行中,我发起了: telnet localhost 80 GET / HTTP/1.1 Host: {IP Address} 等到下一个三个命令返回之后再input两次。 我使用的第一个命令是找出端口号: lsof -p `pidof telnet` 然后,找出过程: netstat -nap | grep {port} 最后: strace -o /tmp/output -f -r -s4096 -p {PID} 然后我在telnet命令上按回车键来返回请求,以便它login到输出文件中。 当telnet最终返回时,我查看了输出文件,并search了最长的进程,它们是: 6152 12.143817 read(17, "GET / HTTP/1.1\r\n", 8000) = 16 6152 0.000178 […]