strace

linux truss strace ltrace 对比 诊断调试程序

社会主义新天地 提交于 2020-02-04 13:21:13
strace、ltrace、truss作用 1.了解一个程序的工作原理(可以了解Linux下很多常用的命令实现的原理); 2.帮助定位程序中的问题(在开发工作时帮助定位问题); strace strace(strace - trace system calls and signals)能够跟踪进程使用的系统调用,并显示其内容。因此,当遇到调试不明的故障时,首先使用strace找出系统调用中出错的地方,通常能得到故障发生的线索,特别是与文件有关的错误、参数错误等。使用strace能够有效地发现系统调用失败有关的故障,但无法发现用户写出的程序或共享库中发生的错误。strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。跟踪程序的每个系统调用strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 -i 找到地址方便GDB详细调试。给strace添加 -i 选项即可显示程序在哪个地址进行了系统调用,可以将该地址作为断点使用,然后使用GDB进一步定位问题。 ltrace ltrace能够跟踪进程的库函数调用 truss truss和strace命令达成的效果是基本一致的。truss和strace用来跟踪一个进程的系统调用或信号产生的情 strace ltrace区别 strace —— Trace

内核调试工具——strace

a 夏天 提交于 2020-01-16 06:07:33
简介 strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 输出参数含义 root@ubuntu:/usr# strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0 brk(0) = 0xab1000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) ... brk(0) = 0xab1000 brk(0xad2000) = 0xad2000 fstat(1, {st_mode=S_IFCHR

性能优化 = 改改代码?

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-10 10:52:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这里是Z哥的个人公众号 每周五11:45 按时送达 当然了,也会时不时加个餐~ 我的第「124」篇原创敬上 大家好,我是Z哥。 好久没写技术文章了,最近正好有进行一些思考,顺手写出来分享给大家。 上了一定规模的系统,特别是To C的系统,性能优化或多或少都会被逼着去做一下。否则,系统便无法支撑业务的发展,技术成了拖后腿,不是引领业务了。 一旦线上出现了性能问题,就会很棘手。因为它和业务功能上的Bug不同,后者的分析和解决思路更清晰,只要日志记录到位,沿着一条已知的业务逻辑线,很容易就能找到问题根源。 而性能问题就会复杂的多,导致的因素有很多,甚至会是多种因素共同作用下的结果。比如,代码质量低下、业务发展太快、架构设计不合理等等。 而且一般情况下,性能问题处理起来比较耗时,涉及到的分析链路可能会很长,特别是自己小组之外的上下游系统,很多人不愿意干,或者说有心无力。最多采用一些临时性的补救手段,碰碰运气。比如,扩容增加机器、重启大招、……。 有些临时性的补救措施,有时候不但不能解决问题,还会埋下新的隐患。 比如,从表象上看到某个程序因为给的资源不足导致产生性能问题。临时增加更多资源给它,可能从表面上看,问题是解决了。但是实则可能是因为程序内部对资源的使用上存在不合理的地方,增加资源只是延缓问题发作的时间

strace

一笑奈何 提交于 2020-01-07 19:31:08
strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 来源: https://www.cnblogs.com/igoodful/p/12152495.html

Hung processes resume if attached to strace

半腔热情 提交于 2020-01-06 17:55:37
问题 I have a network program written in C using TCP sockets. Sometimes the client program hangs forever expecting input from server. Specifically, the client hangs on select() call set on an fd intended to read characters sent by server. I am using strace to know where the process got stuck. However, sometimes when I attach the hung client process to strace, it immediately resumes it's execution and properly exits. Not all hung processes exhibit this behavior, some processes stuck in the select()

Linux实战监控分析

泄露秘密 提交于 2020-01-02 04:56:52
实时查看tomcat并发连接数 netstat -na | grep ESTAB | grep 8080 | wc -l 实时查看apache并发连接数 netstat -na | grep ESTAB | grep 80 | wc -l 查看物理cpu的个数命令: cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l 查看核数命令:每个物理cpu中core的个数(即核数) cat /proc/cpuinfo | grep "cpu cores" | uniq 每个物理cpu中逻辑cpu的个数(以下两条命令都可以) cat /proc/cpuinfo | grep "processor" | wc -l cat /proc/cpuinfo | grep "siblings" | uniq(以上命令""或''都可以) windows上看cpu多核命令是systeminfo, 安装sar命令是yum -y install sysstat 监控概述: cpu 在虚机里输入top命令,紧接着输入1,看到变成cpu0了,如图 ,只虚出一个核对于多核cpu来说,cpu0是相当关键的,cpu0相当于cpu中的leader,因为cpu各核间的调度都通过cpu0完成,如果cpu0的负载高,调度cpu就比较困难,就会影响其他核的性能

Linux strace命令

房东的猫 提交于 2019-12-28 01:21:18
简介 strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 输出参数含义 root@ubuntu:/usr# strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0brk(0) = 0xab1000access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)...brk(0) = 0xab1000brk(0xad2000) = 0xad2000fstat(1, {st_mode=S_IFCHR|0620, st

strace shell command issue in Android

ε祈祈猫儿з 提交于 2019-12-25 04:56:21
问题 I'm building a monitor app, which runs in background and logs the system calls executed by currently running application using the strace command. String cmd="strace -p "+processID+" -o /mnt/sdcard/traceFile_"+processID+".txt"; Runtime.getRuntime().exec(cmd); Here processID is the PID of currently running process which is got from some other method implemented. It logs the system calls of the first app it monitors properly with all executed system call information. But when a new app is

strace 使用

…衆ロ難τιáo~ 提交于 2019-12-25 02:18:25
使用Strace跟踪 oracle 读取数据块 oracle是一个C语言程序,通过调用系统的io函数来实现io的过程,在linux下可以通过strace工具来 很方便查看进程对io函数的调用过程. 测试场景使用了rhel 5.8和oracle database 12C. 查看oracle对应的服务器进程号. [root@o12c ~]# ps -eaf | grep beq oracle 1611 1591 0 03:01 ? 00:00:00 oraclec12 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) root 1683 1650 0 03:02 pts/5 00:00:00 grep beq 使用strace 对进程进行跟踪 [root@o12c ~]# strace -p 1611 -o test1.out 首先调用open函数,读取表空间的数据文件返回句柄12,然后使用fcntl进行文件句柄复制和其他操作,原来的文件句柄12被关闭. 接下来使用pread函数来读取文件.附带也证明了一点就是oracle服务器进程负责去读取数据文件,而写数据文件是通过后台进程dbwr 来完成的. 接下来我们打开sql trace,通过sql trace文件和strace文件对应,过程更加直观. [root@o12c ~]# ps

strace -c does not show correct seconds

自作多情 提交于 2019-12-24 08:09:33
问题 I have got results for strace -c on RHEL 7 and RHEL 6 for this command: strace -c /bin/sleep 20 and I don't understand why the seconds column for nanosleep is equal to 0. I had expected it to be 20. 0.00 0.000000 0 1 nanosleep Here is a full strace report: $ strace -c /bin/sleep 20 % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000019 1 15 12 open 0.00 0.000000 0 1 read 0.00 0.000000 0 5 close 0.00 0.000000 0 8 6