- 浏览: 135349 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr + Tomcat安装 -
jack_boy:
blackproof 写道原来也用过es,超费内存,不如sol ...
ElasticSearch中文分词ik安装 -
blackproof:
原来也用过es,超费内存,不如solar好用
ElasticSearch中文分词ik安装
跟踪同一个系统中不同进程的系统调用
在编写多线程的程序时,偶尔会遇到某一个线程不工作的现象,想看看到底卡在什么地方。
1)查看日志,在每行日志中都添加线程号,该方法存在一个问题,当日志滚动很多天时,找到某个线程的最后一行日志比较费劲,并且如果没有很详细的debug日志的话,代码检查范围也比较广。
2)使用strace命令,strace命令是查看某个进程的系统调用,我们知道linux下线程其实是进程模拟的,它也有一个进程号。
或者使用pstree -p pid
然后调用strace -p pid就可以查看每个线程的系统调用。
接下来,用pstack pid命令查看系统调用的栈,相当于gdb的bt命令
附:
通过查找发现程序卡在futex上,如:
google查询之后,确定为信号处理函数中调用了snprintf函数,printf函数族为不可重入的,在信号处理函数中调用,其结果为未确定
在编写多线程的程序时,偶尔会遇到某一个线程不工作的现象,想看看到底卡在什么地方。
1)查看日志,在每行日志中都添加线程号,该方法存在一个问题,当日志滚动很多天时,找到某个线程的最后一行日志比较费劲,并且如果没有很详细的debug日志的话,代码检查范围也比较广。
2)使用strace命令,strace命令是查看某个进程的系统调用,我们知道linux下线程其实是进程模拟的,它也有一个进程号。
> top -H -p pid Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st [18/1958] Mem: 32845044k total, 11038828k used, 21806216k free, 881144k buffers Swap: 8388600k total, 0k used, 8388600k free, 8332956k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20261 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:02.95 ldapproxy 20262 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.99 ldapproxy 20263 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.96 ldapproxy 20264 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.96 ldapproxy 20265 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.96 ldapproxy 20266 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20267 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20268 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20269 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20270 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20271 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20272 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy 20273 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
或者使用pstree -p pid
ldapproxy(20261)─┬─{ldapproxy}(20262) ├─{ldapproxy}(20263) ├─{ldapproxy}(20264) ├─{ldapproxy}(20265) ├─{ldapproxy}(20266) ├─{ldapproxy}(20267) ├─{ldapproxy}(20268) ├─{ldapproxy}(20269) ├─{ldapproxy}(20270) ├─{ldapproxy}(20271) ├─{ldapproxy}(20272) └─{ldapproxy}(20273)
然后调用strace -p pid就可以查看每个线程的系统调用。
接下来,用pstack pid命令查看系统调用的栈,相当于gdb的bt命令
附:
通过查找发现程序卡在futex上,如:
futex(0xb770b0, FUTEX_WAIT, 2, NULL
google查询之后,确定为信号处理函数中调用了snprintf函数,printf函数族为不可重入的,在信号处理函数中调用,其结果为未确定
发表评论
-
fedora live use
2015-11-29 09:42 471vesamenu.c32:not a COM32R image ... -
远程拷贝文件
2015-05-08 09:57 388把机器上指定后缀名的代码,一股脑拷贝的别的机器上,lbin是主 ... -
Hive去重复数据
2015-03-23 15:33 7644Hive数据去重 insert overwrite table ... -
Mongodb C++ driver中的逻辑操作“或”
2015-01-28 15:17 2731Mongodb中的查询操作比 ... -
happybase访问Hbase
2015-01-08 14:40 4830Java以为的语言访问Hbase都是通过thrift进行访问的 ... -
ElasticSearch中文分词ik安装
2015-01-02 22:59 20109http://www.elasticsearch.org/ov ... -
ssh 无密码登陆
2014-12-26 14:03 659用$ssh-keygen -t rsa生成密钥与公钥 将.ss ... -
vim 非贪婪匹配
2014-11-13 15:14 2844vim的模式匹配使用正则表达式 .*是贪婪匹配,会匹配最多的字 ... -
[转]vim-airline in xshell or putty or MobaXterm
2014-11-11 13:36 6343windows下使用Xshell,putty或者是MobaXt ... -
easy_install 报错
2013-11-26 10:32 1013easy_install -U distribute 后执行 ... -
python中的@
2013-11-15 11:31 0python中的@符号 在python中有一个@符号,起到装 ... -
LVS+keepalived配置备忘
2013-07-18 14:47 2785LVS + keepalived实现负载均衡的文档很多,这里不 ... -
Structs in ruby
2012-12-11 14:33 1141Ruby中的Struct是一个特殊的类,只(仅仅只)用来存取数 ... -
ruby mix-in
2012-12-10 16:49 1715Ruby mix-in Ruby 是一门面向对象的语言,所有一 ... -
gnome-shell安装
2012-09-04 12:54 13931. 安装gnome3 tweak tool工具,用于gnom ... -
源码编译安装mysql
2012-08-30 14:52 1371由于开发环境中的mysql有别的用处,为了不影响开发换进需要源 ... -
Linux网络参数优化
2012-08-21 18:47 2049net.ipv4.tcp_tw_reuse = 1 表示开启重 ... -
typedef定字符串数组类型
2012-07-24 14:06 1043typedef char char_array[1024]; ... -
tmux使用(程序员适用)
2012-07-12 16:53 32512tmux基本使用 tmux是一个优秀的终端复用软件,即 ... -
在Linux下查看系统名称
2012-07-04 15:57 4629有时候需要查看系统名称,由于使用不多,以至于经常遗忘,反复Go ...
相关推荐
通过扩展Linux系统调用跟踪工具strace,实现了启发式跟踪工具heuristic-strace,其能够实时发现和自动跟踪应用程序中通过网络通信的进程,形成进程创建关系图、进程网络通信关系图,并结合系统调用的栈回溯信息,...
Linux系统调用跟踪和进程错误退出分析.pdf
strace命令是一个集诊断、调试、统计与...strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 语法格式:strace [参数] 常用参数: -c 统计每一系统调用的所执行的时间,次数和出错的次数等
哈工大的操作系统实验三,今年老师要求制作PPT,于是良心制作,详细记录了系统调用的相关操作及实验结论,希望对有心人有用,大家共同进步
第5章 文件系统的系统调用 5.1 系统调用Open 5.2 系统调用read 5.3 系统调用write 5.4 文件和记录的上锁 5.5 文件的输入/输出位置的调整lseek 5.6 系统调用close 5.7 文件的建立 5.8 特殊文件的建立 5.9 改变...
当一个程序发生故障时,有时候想通过了解该进程正在执行的系统调用来排查问题。通常可以用 strace 来跟踪。但是当进程已经处于 D 状态(uninterruptible sleep)时,strace 也帮不上忙。这时候可以通过 代码如下:cat...
非常详细地介绍了strace系统调用跟踪工具的使用方法,列举了工程实践中常遇到的调试手段和解决方法。
当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID,其他的都是一样。就象符进程克隆(clone)自己一样.当然创建两个一模一样的进程是没有意义的。为了区分父进程...
一个Windows进程抓包器的C++实现
第1章 系统概貌 1.1 历史 1.2 系统结构 1.3 用户看法 1.3.1 文件系统 1.3.2 处理环境 1.3.3 构件原语 1.4 操作系统服务 1.5 关于硬件的假设 1.5.1 中断与例外 1.5.2 处理机执行级 1.5.3 存储管理 1.6 本...
strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 输出参数含义 root@ubuntu:/usr# strace cat /dev/null execve(/bin/cat, [cat, /dev/null], [/* 22 vars */]) = 0 brk(0)
利用C语言,、DOS中断中21H与屏幕显示相关的中断调用设计完成,具体包括:1.进程模拟数据读取与分析2.进程调度(状态转换)3.进程运行状态显示4.页式空间组织与管理5.页式存储空间分配6.页式存储空间回收7、页的调入...
系统调用服务适用于 Windows 7 / 8 / 2008 / 2012 的主机/进程/线程级系统调用跟踪器先决条件需要 .NET Framework 4.5 或更高版本Windows 7 / 2008 / 2008 R2 / 8 / 8.1 / 2012 / 2012 R2 TraceEvent 1.0.29(可以...
6.5 实例——利用系统调用实现一个调用日志收集系统 143 6.5.1 代码体系结构 143 6.5.2 把代码集成到内核中 146 6.5.3 实现步骤 148 习题6 148 第7章 内核中的同步 149 7.1 临界区和竞争状态 149 7.1.1 临界区举例 ...
合工大计算机学院操作系统 实验五-进程的创建 1. 实验目的和任务要求 掌握创建子进程和加载执行新程序的方法,理解创建子进程和加载执行程序 ...调试跟踪 fork 和 execve 系统调用函数的执行过程。
vltrace是一个系统调用跟踪工具,它利用eBPF(Linux内核的有效跟踪功能)。执照请参阅文件以获取有关此工具如何获得的信息。依赖vltrace取决于库。 libbcc的安装指南可以在找到。系统要求内核v4.7或更高版本 安装的...
2.4.1 系统调用接口 2.4.2 中断处理 2.5 同步 2.5.1 阻塞操作 2.5.2 中断 2.5.3 多处理器 2.6 进程调度 2.7 信号 2.8 新进程和程序 2.8.1 fork 和exec 2.8.2 进程创建 2.8.3 fork 优化 2.8.4 执行一个新程序 2.8.5 ...
本课程从理解计算机硬件的核心工作机制(存储程序计算机和函数调用堆栈)和用户态程序如何通过系统调用陷入内核(中断...12.使用库函数API和C代码中嵌入汇编代码触发同一个系统调用 13.给MenuOS增加time和time-asm命令
6.5 系统调用ptrace()和进程跟踪 6.6 报文传递 6.7 共享内存 6.8 信号量 第7章基于socket的进程间通信 7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数...
ptrace是process和trace的简写,直译为进程跟踪。它提供了一种使父进程得以监视和控制其子进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现系统调用的跟踪和断点调试。