- 浏览: 137851 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 503vesamenu.c32:not a COM32R image ... -
远程拷贝文件
2015-05-08 09:57 433把机器上指定后缀名的代码,一股脑拷贝的别的机器上,lbin是主 ... -
Hive去重复数据
2015-03-23 15:33 7707Hive数据去重 insert overwrite table ... -
Mongodb C++ driver中的逻辑操作“或”
2015-01-28 15:17 2829Mongodb中的查询操作比 ... -
happybase访问Hbase
2015-01-08 14:40 4871Java以为的语言访问Hbase都是通过thrift进行访问的 ... -
ElasticSearch中文分词ik安装
2015-01-02 22:59 20165http://www.elasticsearch.org/ov ... -
ssh 无密码登陆
2014-12-26 14:03 695用$ssh-keygen -t rsa生成密钥与公钥 将.ss ... -
vim 非贪婪匹配
2014-11-13 15:14 2919vim的模式匹配使用正则表达式 .*是贪婪匹配,会匹配最多的字 ... -
[转]vim-airline in xshell or putty or MobaXterm
2014-11-11 13:36 6398windows下使用Xshell,putty或者是MobaXt ... -
easy_install 报错
2013-11-26 10:32 1057easy_install -U distribute 后执行 ... -
python中的@
2013-11-15 11:31 0python中的@符号 在python中有一个@符号,起到装 ... -
LVS+keepalived配置备忘
2013-07-18 14:47 2844LVS + keepalived实现负载均衡的文档很多,这里不 ... -
Structs in ruby
2012-12-11 14:33 1199Ruby中的Struct是一个特殊的类,只(仅仅只)用来存取数 ... -
ruby mix-in
2012-12-10 16:49 1770Ruby mix-in Ruby 是一门面向对象的语言,所有一 ... -
gnome-shell安装
2012-09-04 12:54 14861. 安装gnome3 tweak tool工具,用于gnom ... -
源码编译安装mysql
2012-08-30 14:52 1442由于开发环境中的mysql有别的用处,为了不影响开发换进需要源 ... -
Linux网络参数优化
2012-08-21 18:47 2118net.ipv4.tcp_tw_reuse = 1 表示开启重 ... -
typedef定字符串数组类型
2012-07-24 14:06 1105typedef char char_array[1024]; ... -
tmux使用(程序员适用)
2012-07-12 16:53 32621tmux基本使用 tmux是一个优秀的终端复用软件,即 ... -
在Linux下查看系统名称
2012-07-04 15:57 4671有时候需要查看系统名称,由于使用不多,以至于经常遗忘,反复Go ...
相关推荐
本文介绍了一种新的系统调用跟踪工具heuristic-strace,基于strace工具,能够实时发现和自动跟踪应用程序中通过网络通信的进程,形成进程创建关系图、进程网络通信关系图,并结合系统调用的栈回溯信息,定位进程的...
根据提供的文件信息,可以...通过以上知识点,我们可以了解在Minix操作系统中添加一个支持实时进程的系统调用并实现彩票调度算法的过程。这涉及到对操作系统内核源码的深入理解,以及对进程调度策略的细致设计和实现。
在Linux系统中,strace是一个非常有用的工具,它能够监控并记录进程对系统调用的使用情况。通过strace,我们可以看到程序如何与操作系统交互,比如打开文件、创建网络连接或进行进程间通信等。这个项目中的"微小...
1. `strace`: 一个用于跟踪进程系统调用的工具,帮助开发者理解程序行为和查找问题。 2. `perf`: 提供系统调用计数和性能分析,有助于性能优化。 3. 系统调用重定向:可以通过修改内核配置或使用`seccomp`机制限制或...
要添加一个新系统调用,需要执行 3 个基本步骤:添加新函数、更新头文件、更新系统调用表。在添加新函数时,需要注意用户空间的需求,因为用户空间应用程序需要使用这个新函数。在 Linux 中,系统调用可以通过中断...
在实验中,学生可能需要编写一个监控程序,该程序可以捕获和记录上述系统调用的信息,同时进行统计分析。例如,他们可能需要计算平均进程运行时间、进程切换频率、阻塞事件的数量等。这不仅要求对操作系统原理有深入...
在Linux中,进程管理和系统调用是实现这些功能的关键技术。 **Linux进程管理** 进程是操作系统资源分配的基本单位,它包含了程序在特定数据集上的执行。在Linux中,进程和任务的概念是等价的。进程有五种基本状态...
2. **系统调用编号**:每个系统调用都有一个唯一的编号,如1代表`sys_exit`,2代表`sys_fork`等。这些编号在`<linux/syscalls.h>`头文件中定义。 3. **系统调用处理流程**:详细解析从用户态到内核态的切换,包括...
1. **系统调用监控**:记录和分析每个进程的系统调用序列,这可以通过内核级的系统调用过滤和跟踪实现。 2. **正常行为建模**:收集大量已知安全的程序运行时的系统调用序列,构建正常行为的统计模型或模板。 3. **...
3. **系统调用跟踪**:使用`strace`工具可以跟踪进程的系统调用,但为了更深入地学习,我们将创建自定义的系统调用并集成到内核中。这涉及到内核模块的开发和编译,包括修改系统调用表、编写系统调用处理函数以及...
### Linux进程管理调用知识点详解 #### 一、进程与程序的概念...通过以上知识点的学习和理解,我们可以更好地掌握Linux操作系统中进程管理和系统调用的核心概念和技术,为进一步深入研究Linux内核原理打下坚实的基础。
strace命令是一个集诊断、调试、统计与...strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 语法格式:strace [参数] 常用参数: -c 统计每一系统调用的所执行的时间,次数和出错的次数等
- **execve()**: 在当前进程上下文中加载并执行一个新的可执行程序,通常用于启动其他程序。 - **exit()**: 正常结束当前进程,清理资源并返回退出状态码给父进程。 - **_exit()**: 立即结束进程,不执行清理操作,...
- `ptrace()`:允许一个进程跟踪另一个进程的执行,通常用于调试。 - `sched_*()`:一系列调度相关的系统调用,用于获取或设置进程的调度参数和策略。 2. **文件系统控制**: - `fcntl()`:对文件描述符进行各种...
Strace是一个在Linux环境下用于诊断、调试和跟踪系统调用和进程间通信的工具。它通过跟踪和记录指定进程对内核的调用和接收的信号,将系统调用的名字、参数、返回值打印出来,这对于解决和定位问题非常有帮助。 在...
哈工大的操作系统实验三,今年老师要求制作PPT,于是良心制作,详细记录了系统调用的相关操作及实验结论,希望对有心人有用,大家共同进步
- 开发者可以使用strace工具来跟踪一个进程的系统调用,查看哪些系统调用被调用以及它们的参数和返回值。 - 还可以通过内核模块(如ptrace)来深入分析系统调用的行为,这对于调试和性能优化非常有用。 通过深入...
- **功能**: `fork` 是一个用于创建新进程的基础系统调用。当一个进程调用 `fork` 后,它会产生一个新的进程(子进程),这个子进程几乎与父进程完全相同,除了PID不同。 - **返回值**: 在父进程中返回子进程的PID...
实验目的是让学生掌握如何使用`Creat()`原语,这是一个操作系统内核提供的系统调用,用于在操作系统中创建新的进程。在Pascal中,`Creat()`可能封装了操作系统内核的底层操作,如申请进程控制块(PCB)、初始化进程...