Articles of strace的

ls -l本地和远程冻结terminal

我一直在阅读关于ls没有返回结果或冻结和拖延terminal会话的其他SF线程,它似乎通常是networking问题的错误。 然而,我的问题,既发生在远程SSH会话,而且如果我身体在服务器本身… 我刚刚在我们的一台服务器上安装了CentOS 5.4。 我正在设置一些rdiff备份脚本,当我下载librsync并将其解压缩时,那当我开始看到ls -l一些奇怪行为的时候。 wget http://sourceforge.net/projects/librsync/files/librsync/0.9.7/librsync-0.9.7.tar.gz/download /tmp cd /tmp tar -xzf librsync-0.9.7.tar.gz 很简单。 要查看这个目录中的文件,我这样做了: ls 结果: librsync-0.9.7 librsync-0.9.7.tar.gz 现在,如果我ls -l ,我的terminal冻结了。 我必须重新进入继续。 在阅读SF线程后,我认为这是networking相关的。 所以我非常惊讶地坐在服务器本身 ,看到完全相同的事情发生 …所以它显然不是一个networking问题。 即使我ls /tmp/librsync-0.9.7 ,我的terminal冻结只是一样的… 接下来,我做了一个strace,得到了这个(警告:文本的墙壁来…): strace ls -l /tmp execve("/bin/ls", ["ls", "-l", "/tmp"], [/* 21 vars */]) = 0 brk(0) = 0x1c521000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) […]

WSGI不能访问文件,但权限是正确的

我正在debuggingCentOS上的MoinMoin抛出一个权限错误的问题,但我无法追查有问题的文件/目录。 我在apache上运行strace -vp <pid> ; 当我遇到问题时,我看到: epoll_wait(10, {{EPOLLIN, {u32=3487534344, u64=140367313734920}}}, 2, 10000) = 1 accept4(6, {sa_family=AF_INET6, sin6_port=htons(52621), inet_pton (AF_INET6, "::ffff:105.193.30.91", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28], SOCK_CLOEXEC) = 11 ## Later on… read(7, 0x7fffa658ad7f, 1) = -1 EAGAIN (Resource temporarily unavailable) 但是,由于apache已经在运行,所以在文件7上我看不到相应的open() 。 因此我看到权限问题,但我仍然不知道哪个文件是问题。 我知道我可以尝试捕获所有的文件打开时,我重新生成的Apache,但我希望有一种方法来映射文件7到一个真正的文件名…有没有办法做到这一点? 编辑1: 使用@lain的指导,我跑了lsof | grep 266474069 lsof | grep 266474069 ,但结果不清楚… [root@lnxlmf moin]# […]

从lsof和Apache strace追踪难以捉摸和缓慢的anon_inode

遇到一个LAMP应用程序的间歇性问题,其中Apache分叉到它的ServerLimit和研磨到(近)停止。 任何httpd进程的strace都会显示很多慢的epoll_wait调用。 1.254721 epoll_wait(14, {{EPOLLIN, … 3.296430 epoll_wait(14, {{EPOLLIN, … 1.018047 epoll_wait(14, {{EPOLLIN, … 1.279721 epoll_wait(14, {{EPOLLIN, … 1.145649 epoll_wait(14, {{EPOLLIN, … 1.269836 epoll_wait(14, {{EPOLLIN, … 1.094779 epoll_wait(14, {{EPOLLIN, … 1.205911 epoll_wait(14, {{EPOLLIN, … 9.052785 epoll_wait(14, {{EPOLLIN, … 1.116279 epoll_wait(14, {{EPOLLIN, … 1.027709 epoll_wait(14, {{EPOLLIN, … 1.178679 epoll_wait(14, {{EPOLLIN, … 1.336032 epoll_wait(14, {{EPOLLIN, … 2.541861 […]

Apache Web服务器由于进程处于D状态而最大化

我有一个运行在8核心8核心虚拟机上的Apache 2.2.3 Web服务器。 在负载testing期间,Web服务器停止响应,平均负载高达1000。 当我运行Top命令时,我看到大量的httpd进程被卡在“D”状态。 我做了一些search,似乎“D”状态意味着不间断的睡眠。 我整理了一个卡住的进程,下面是输出: # strace -p 27843 Process 27843 attached – interrupt to quit fcntl(34, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1} 然后我做了一个lsof来检查fd 34是什么,下面是输出: httpd 27843 apache 34u REG 8,1 0 131756 /tmp/.xcache.0.0.1292616489.lock (deleted) 看来这可能与xcache的locking问题有关,但是我应该如何继续从这里进行疑难解答?

strace没有显示任何线程在100%'系统'的CPU

我很难与我的Python应用程序跨多个线程100%的“系统”CPU时间达10秒以上。 我(有限)的理解是'系统'CPU时间是花在内核上的时间。 strace显示正在进行的内核调用和(可选)多久。 在这些暂停之一中,我设法在一个线程上运行strace,但是strace输出在那段时间内只有一个缺口,而且在这个缺口的任何一边都会显示很短的时间。 如何正确运行strace来找出发生什么内核调用? 在我的Python应用程序中,我使用单独的线程和psutil来检查高系统CPU的任何线程,然后将其注销。 一旦我看到一个我使用下面的命令行来启动strace: strace -tT -o ~/strace.log -p <PID of thread> 从我的应用程序中logging(使用psutil下的psutil ): 2015-05-19 08:05:47,025 WARNING:log.cpu Logging paused for 0.34s to 08:05:46.985768 – longer than expected – other threads probably delayed as well 2015-05-19 08:05:47,026 WARNING:log.cpu This process utilization (CPUs) user: 0.1, system: 52.4 | OS (%) scputimes(user=0.4, nice=0.0, system=80.2, idle=19.3, […]

Centos 6 vs Centos 7文件访问性能

我想找一些帮助来弄清楚什么可以解释为什么Centos 7在访问文件,然后是Centos 6比较慢。这大概有17%的差异。 这是一个简单的testing: [root@test-centos6 shm]# time for i in $(seq 0 50000); do stat file > /dev/null; done real 0m42.283s user 0m2.465s sys 0m4.434s [root@test-centos6 shm]# time for i in $(seq 0 50000); do stat file > /dev/null; done real 0m41.890s user 0m2.442s sys 0m4.341s [root@test-centos6 shm]# time for i in $(seq 0 50000); […]

无法以除根以外的任何用户身份login – 权限被拒绝

帮帮我! 我很绝望 :) 我无法以root身份以外的任何用户身份login。 我在Ubuntu 10.04上。 这是命令输出: root@pinky:~# adduser test Adding user `test' … Adding new group `test' (1003) … Adding new user `test' (1003) with group `test' … Creating home directory `/home/test' … Copying files from `/etc/skel' … Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information […]

在长期生活的ruby进程中,DNS查询最终变得一直很慢

我有一个运行在Ubuntu服务器上的Ruby应用程序,这个应用程序经常需要向其他服务发出HTTP请求。 其中一些服务位于内部域,有些可以通过公共DNS访问。 我有一个Consul代理与我的Ruby应用程序共同工作,它的工作是解决内部组件的DNS查询。 最终,Ruby应用程序的速度变慢,并且需要5秒钟才能parsing到外部域的DNS查询。 我需要帮助理解为什么下面描述的行为可能会发生。 为了澄清,我的目标是了解以下行为,我已经有几个修复/我正在考虑的解决方法。 我已经将问题隔离到以下内容: 最小可重复的例子: 在/etc/resolv.conf nameserver 127.0.0.1 nameserver 8.8.8.8 我用下面的始终SERVFAIL DNSparsing器代替端口53上的Consul: #!/usr/bin/env ruby require "rubydns" RubyDNS.run_server(listen: [[:udp, "0.0.0.0", 53], [:tcp, "0.0.0.0", 53]]) do otherwise do |transaction| transaction.fail!(:ServFail) end end 我把上面的文件放在一个文件( /var/vcap/data/tmp/dns.rb )然后运行它: ruby /var/vcap/data/tmp/dns.rb 这不是非常重要的,但是上面的是用系统ruby(1.9)来运行的。 然后我运行下面的命令(再次,可能不重要,但是这使用了不同的ruby版本): var/vcap/packages/ruby-2.1.6/bin/ruby -r'net/protocol' -e \ '1.step do |i|; t=Time.now; TCPSocket.open("SOME.REAL.DOMAIN",80).close; p Time.now-t; end' 上面是一个小小的谎言,打印出来的格式有点多了,但是为了使它适合这个post而不需要左右滚动,我简化了一下。 观察到的行为: 我看到的行为是一段时间,循环的每个迭代大约10ms的顺序,但最终它开始采取5000ms的顺序。 […]

将strace连接到100%CPU Apache进程 – 输出

我遇到了使用100%CPU的Apache2产卵进程的问题。 将strace连接到这样的进程之一,有时会产生输出,有时会给出这个结果: 2672 17:18:07 poll([{fd=14, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) 2672 17:18:07 write(14, "\236\3\0\0\3SELECT FLOOR(((price_index."…, 930) = 930 2672 17:18:07 read(14, "\1\0\0\1\2\33\0\0\2\3def\0\0\0\5range\0\f?\0\r\0\0\0\10\0"…, 16384) = 85 我会很感激任何想法来解释上述。

关于没有输出strace的问题

我正在使用strace来查看某些进程在做什么。 我有一个似乎永远在运行的Apache进程,占用了97.8%的内核和几乎2GB的内存。 现在,当我在这个过程中运行strace时,根本没有输出。 这是否意味着这个过程是死的,坐在那里占用资源? 我可以杀死进程而不用担心做坏事吗? 我按照以下方式运行strace: strace -p6873 谢谢 约什·彭宁顿