strace

mysql 夯hang死堆栈采集工具

江枫思渺然 提交于 2020-03-09 15:57:57
这里我们的场景是mysql client已经无法登陆,无法执行sql。 基本思路是打出堆栈来分析 此时首先怀疑mysql内部发生了死锁 1. 使用pstack打出堆栈,会有一定性能影响 yum install gdb pstack mysql_pid > /tmp/pstack.out 也可以用gdb gdb -batch -ex "thread apply all bt" -p mysql_pid > /tmp/gdb.log 堆栈可能比较多,需要耐心一点点排查,找出死锁的调用路径 2. 使用strace打出一段时间内的系统调用信息,会有一定性能影响 strace -o /tmp/strace_output.txt -T -tt -f -e trace=all -p {mysql_pid} 可以作为额外信息,辅助堆栈的排查 如果pstack或gdb也无法进入,那可能mysql已经不响应信号了 只能从操作系统提供的proc文件收集一些信息 cat /proc/mysql_pid/status 注意,status里除了进程状态之外,也有信号处理相关的信息Sig* cat /proc/mysql_pid/task/*/stack cat /proc/mysql_pid/syscall cat /proc/mysql_pid/stack 当前的系统调用信息

在 php 中使用 strace、gdb、tcpdump 调试工具

Deadly 提交于 2020-03-04 15:25:35
转自:http://www.syyong.com/php/Using-strace-GDB-and-tcpdump-debugging-tools-in-PHP.html 在 php 中我们最常使用调试方式是输出打印方式,比如通过 echo、var_dump 输出信息到终端或者通过 fwrite、file_put_contents 将信息写入到文件中。这种普通方式能帮我们解决绝大部分调试问题。但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用 cpu 过高,php 内核或者扩展错误等场景,这时如果借助 strace、gdb、tcpdump 这样的工具就能很好的去帮助我们定位问题。 strace strace 是 Linux 环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。 在 Linux 中,进程是不能直接去访问硬件设备(比如读取磁盘文件,接收网络数据等等),但可以将用户态模式切换至内核态模式,通过系统调用来访问硬件设备。这时 strace 就可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间,调用次数,成功和失败的次数。 比如我们使用 strace 来跟踪 cat 查看一个文件做了什么: [root@syyong home]$ strace cat index.php execve("/bin/cat

通过trace跟踪系统调用

╄→гoц情女王★ 提交于 2020-03-04 15:16:53
简介 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

Linux strace追踪命令详解

穿精又带淫゛_ 提交于 2020-03-04 15:16:25
strace介绍 strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。当然strace与专业的调试工具比如说gdb之类的是没法相比的,因为它不是一个专业的调试器。 strace的最简单的用法就是执行一个指定的命令,在指定的命令结束之后它也就退出了。在命令执行的过程中,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

[strace]跟踪进程的系统调用

你。 提交于 2020-03-04 15:15:02
转自 : https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 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

strace命令

末鹿安然 提交于 2020-03-04 15:14:07
简介 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

linux strace解决段错误

风格不统一 提交于 2020-03-04 14:59:00
帮老丁调试他的xfa程序,这个程序有段错误。用gdb调试,bt查看堆栈信息的时候可以比较明确地定位到几个函数去,但是懒得去一步步查看。想起strace来跟踪一下系统调用。 strace -f -o generateallxfa.strace ./generateallxfa -ruleno 1 -rulefile ./experiment/ftp-refined.re 1) processing regex:: <.*[sS][iI][tT][eE]#.*[cC][hH][mM][oO][dD]> <set_only_bit> [root@localhost XFA]# cat generateallxfa.strace 9224 execve("./generateallxfa", ["./generateallxfa", "-ruleno", "1", "-rulefile", "./experiment/ftp-refined.re"], [/* 36 vars */]) = 0 9224 brk(0) = 0x869b000 9224 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) 9224 open("/etc/ld.so.cache", O_RDONLY) = 3

为什么有人会省略关闭标签?

拜拜、爱过 提交于 2020-02-26 04:39:37
我一直在阅读,在文件末尾使用PHP close标签 ?> 是一种不好的做法。 标头问题在以下情况下似乎无关紧要(这是迄今为止唯一的好参数): 现代版本的PHP在php.ini中设置了output_buffering标志。如果启用了输出缓冲,则可以在输出HTML之后设置HTTP标头和cookie,因为返回的代码不会立即发送到浏览器。 每本优秀实践书籍和Wiki均以该“规则”开头,但没有人提供充分的理由。 是否还有另一个很好的理由跳过结尾的PHP标记? #1楼 除了已经说过的所有内容外,我还要提出另一个原因,这对我们进行调试是一个巨大的痛苦。 当封闭的 php 标记后面有空白时,带有PHP 5.4的 Apache 2.4.6实际上在我们的生产机器上存在分段错误。 我只是浪费了几个小时,直到我终于用 strace 缩小了bug的范围。 这是Apache引发的错误: [core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11) #2楼 由于我的问题被标记为与此重复的问题,我认为可以出于某些原因发布为什么 不 省略结束标记 ?> 可以的。 使用完整的处理指令语法( <?php ... ?> ),PHP源代码是有效的SGML文档,可以对它进行解析和处理,而SGML解析器不会出现问题。

性能检测工具介绍-Linux系统命令行

ぐ巨炮叔叔 提交于 2020-02-05 07:01:38
本文介绍的关于Linux自带命令进行性能检测的介绍,详细介绍这些linux自带的工具的使用。 一、uptime uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量。如果进程要求CPU时间被阻塞(意味着CPU没有时间处理它),load average值将增加。另一方面,如果每个进程都可以立刻得到访问CPU的时间,这个值将减少。 load average的最佳值是1,这说明每个进程都可以立刻被CPU处理,当然,更低不会有问题,只说明浪费了一部分的资源。但在不同的系统间这个值也是不同的,例如一个单CPU的工作站,load average为1或者2都是可以接受的,而在一个多CPU的系统中这个值应除以物理CPU的个数,假设CPU个数为4,而load average为8或者10,那结果也是在2多点而已。 可以使用uptime判断一个性能问题是出现在服务器上还是网络上。例如,如果一个网络应用运行性能不理想,运行uptime检查系统负载是否比较高,如果不是这个问题更可能出现在你的网络上。 二、top Top命令显示了实际CPU使用情况,默认情况下

Linux常用性能检测命令

故事扮演 提交于 2020-02-05 06:57:37
Linux常用性能检测命令、uptime、top、iostat、Vmstat、pstree、Numastat、sar、free、Pmap、Strace、ulimit 一、uptime Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量。如果进程要求CPU时间被阻塞(意味着CPU没有时间处理它),load average值将增加。另一方面,如果每个进程都可以立刻得到访问CPU的时间,这个值将减少。 UP kernel下的load average的最佳值是1,这说明每个进程都可以立刻被CPU处理,当然,更低不会有问题,只说明浪费了一部分的资源。但在不同的系统间这个值也是不同的,例如一个单CPU的工作站,load average为1或者2都是可以接受的,而在一个多CPU的系统中这个值应除以物理CPU的个数,假设CPU个数为4,而load average为8或者10,那结果也是在2多点而已。 你可以使用uptime判断一个性能问题是出现在服务器上还是网络上。例如,如果一个网络应用运行性能不理想,运行uptime检查系统负载是否比较高