烟台网站排名优化,网站如何盈利,挂机软件定制,网站建设费用价格表本篇文章也是我在解决客户问题时的一些思路#xff0c;希望对读者有用。
本文与GDB也与DBX#xff08;AIX上的调试工具#xff09;无关#xff0c;只是用到了前文《GDB技巧》中的思想#xff1a;取样思想
客户问题#xff1a;
原始问题是磁盘被占满了#xff0c;通过…本篇文章也是我在解决客户问题时的一些思路希望对读者有用。
本文与GDB也与DBXAIX上的调试工具无关只是用到了前文《GDB技巧》中的思想取样思想
客户问题
原始问题是磁盘被占满了通过调查得知有个我们的进程刷数据刷的特变慢于是就得查这个进程到底慢在哪
解决方案
通过每隔一秒取样当时的callstack然后统计下谁最耗时。
AIX上可以用dbx取得callstack但有现成的procstack能直接用免得麻烦了。
写一个简单的shell script:
#!/bin/sh# Usage: ./call_stack.sh pid
# Target: Get call stack of process every secondif [ $# -ne 1 ]; thenecho Usage: $0 process_idexit 1
fiprocess_id$1while true; doif ! kill -0 $process_id 2/dev/null; thenecho Process $process_id has exited.breakfidate /tmp/callstack.outprocstack $process_id /tmp/callstack.outsleep 1
done
最后一统计第一层的函数竟然是writev占绝对优势, 是IO方面的问题所以请求客户与IBM联系去了。
总结
也许AIX上有现成的像Linux上gperf这样的工具 我不得而知但我直接用了适用于各种平台的大法取样不必去研究AIX上的性能工具了而且适用于release版本程序。