• 划时代
    2019-01-21
    赞同在strace -p PID后加上-f,多进程和多线程都可以跟踪。

    作者回复: 👍

    
     41
  • jeff
    2019-01-21
    写文件是由子线程执行的,所以直接strace跟踪进程没有看到write系统调用,可以通过pstree查看进程的线程信息,再用strace跟踪。或者,通过strace -fp pid 跟踪所有线程。

    作者回复: 👍 默认选项是不开启线程的

    
     22
  • 我来也
    2019-01-22
    [D27打卡]
    还好我平常习惯用 `pidstat -wut 1` 既可以看上下文切换 又可以看cpu使用统计 还可以看各线程.

    今天又见识到了两个工具:
    filetop:可以查看进程操作的文件名称等信息
    opensnoop:甚至连操作的文件路径也有.

    看评论还知道了 strace 可以追逐子线程.
    ` strace -p 3387 -f 2>&1 | grep write `
    这样之后就可以搜索到很多系统调用了.

    应该跟什么语言运行 和 在哪运行没关系,最终都是要落实到系统调用上去的吧.
    展开
    
     6
  • 萧易客
    2019-01-23
    perf record -e 'fs:*' -ag
    perf report
    使用perf命令可以从kernel层级记录文件系统的内核事件,相对strace我觉得perf还有一个优势就是对系统的消耗更低,更利于在生产环境使用。
    http://www.brendangregg.com/perf.html

    作者回复: 嗯嗯,谢谢分享新的思路。

    不过perf report 更多的是统计上的分析,而 strace 则是可以看到每一个调用的细节。

    
     5
  • 郭江伟
    2019-01-23
    strace -p -f可以查看进程的所有线程信息,本例中python进程下可能同时存在两个线程,一个线程是socket相关,一个是跟文件读写相关,与文件读写相关的会频繁变化,只需跟踪进程树的最后一个线程就可以。
    可以用pstree -p 查看Python的进程树,然后strace -p 线程号,不过本例中线程消失非常快,需要写个脚本才行 比如:Python进程号是13205 strace -p `pstree -p 13205 | tail -n 1 | awk -F '(' '{print $NF}' | awk -F ')' '{print $1}'

    作者回复: 赞,很好的思路

    
     5
  • Geek_00d753
    2019-03-21
    老师,请教个问题。在cpu密集型任务中一个进程的cpu利用率是各cpu的us%+sy%之和。但当iow%高的时候,这个进程的cpu利用率是怎么算的呢?就像第一个例子中,进程cpu利用率14%,比两个cpu的us%+sy%大很多。我之前理解的iow状态,进程在等io资源,这个时候应该是off-cpu的,是不是我理解错了。难道iow%有一部分也算是cpu占用的吗?那又是怎么计算的呢?谢谢

    作者回复: 很好的问题。多个工具对比计算的时候一定要使用相同的时间间隔,间隔不同时,很可能就会碰到这个问题

    
     2
  • 双
    2019-01-22
    不用那么麻烦吧,一般看用户进程cpu高的,iowait显著的话,直接lsof -p就能找到了什么文件了

    作者回复: 简单场景一条 lsof 就解决了,但复杂的场景则还需要更多的步骤

    
     1
  • 仲鬼
    2019-01-22
    老师好,案例里pidstat的iodelay为0,kB_wr/s也有300MB,是否说明应用程序写文件的性能没有收到影响,造成进程响应慢的可能是其他问题(如系统调用、打开文件等)?

    作者回复: 应该反过来,进程大量的 I/O 时,自己可能问题不大,但却导致了其他进程出现问题

    
     1
  • 我来也
    2019-01-22
    [D27打卡]
    Ubuntu 18.04在安装bcc时出错,然后参考[https://www.codetd.com/article/3092913]可以成功安装.

    因为ppa:hzwhuang/ss-qt5 并没有18.04版本的源,因此会出现
    E: 仓库 “http://ppa.launchpad.net/hzwhuang/ss-qt5/ubuntu bionic Release” 没有 Release 文件 的错误。
    这时,只要编辑/etc/apt/sources.list.d/hzwhuang-ubuntu-ss-qt5-bionic.list 文件,将bionic (18.04版本代号)改成xenial(16.04版本代号)
    然后再执行第二三步骤即可。
    展开

    作者回复: 谢谢分享

    
     1
  • Linuxer
    2019-01-21
    是不是strace要增加-f

    作者回复: strace默认不跟踪子线程的系统调用

    
     1
  • ninuxer
    2019-01-21
    打卡day28
    我一般用strace -cp 来看系统调用的统计信息,然后用-e 查看对应调用的详情

    作者回复: 嗯,不过注意strace默认不跟踪子线程的系统调用

    
     1
  • 远方
    2019-01-21
    使用strace时,没有加-f选项查看线程

    作者回复: 👍

    
     1
  • 永
    2019-12-30
    了解到了,filetop 和 opensnoop工具,写入了大量的临时文件导致的。磁盘空间处理大量数据的技巧是好的。但是太多的写入了。
    
    
  • NoBody
    2019-09-23
    老师你好。我想问一下如何定位那种快速消亡的线程tid,来查找pid。我根据上面的步骤以后。filetop结束以后用ps -efT已经获取不到pid了。最后搜索用ps -eLo pid= -o tid= | awk '$2 == xxx{print $1}'成功输出pid。但是如果线程如果消亡更快的话,应该怎么定位?
    
    
  • Musisan
    2019-05-20
    docker: Error response from daemon: driver failed programming external connectivity on endpoint app (175d6e56d8b0ac97ae0ae46a8b809785dcca95481147f73b71d01670d0546ad4): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 10000 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
     (exit status 1)).

    老师,创建docker镜像时候出现这个,无法运行成功
    展开

    作者回复: 试试重启docker

    
    
  • 大乌贼 (\(●-●...
    2019-04-02
    不知道是不是我ssd的原因,iowait只有一点几,反而上下文切换过多导致sy很高

    作者回复: 嗯,很有可能,试试把数据量再增大一些,iowait应该会跟着升高

    
    
  • 大飞
    2019-04-01
    打卡
    
    
  • 如果
    2019-03-12
    DAY27,打卡
    
    
  • 饼子
    2019-02-05
    打卡学习
    
    
  • zzl
    2019-01-24
    老师您好,你讲的这个正常磁盘瓶颈情况,而我经常遇到的不是这样。比如我是用的中高端存储阵列,跑的是oracle数据库,突然出现io慢的问题,查看磁盘使用率100%,io等待时间很高,io读写只有每秒几K到几兆,磁盘队列正常,完全达不到存储阵列应有的样子,而数据库方面只给出了io读写缓慢导致数据库访问缓慢,让检查系统磁盘io,应用层则是表示最近没有任何变化,突然就变慢了。遇到这种情况,没什么办法,看下存储硬件没问题就不知道该怎么办了。您看这种情况应该怎搞清楚具体底层的原因呢

    作者回复: 对数据库来说,I/O问题除了硬件错误之外,很有可能问题处在数据库本身的使用上。所以,可以从数据库的使用上去排查,比如表结构、SQL、慢查询等等

    
    
我们在线,来聊聊吧