本篇文章也是我在解决客户问题时的一些思路,希望对读者有用。
本文与GDB也与DBX(AIX上的调试工具)无关,只是用到了前文《GDB技巧》中的思想:取样思想
客户问题:
原始问题是磁盘被占满了,通过调查得知有个我们的进程刷数据刷的特变慢,于是就得查这个进程到底慢在哪?
解决方案:
通过每隔一秒取样当时的callstack,然后统计下谁最耗时。
AIX上可以用dbx取得callstack,但有现成的procstack能直接用,免得麻烦了。
写一个简单的shell script:
#!/bin/sh
# Usage: ./call_stack.sh <pid>
# Target: Get call stack of process every second
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <process_id>"
exit 1
fi
process_id="$1"
while true; do
if !

文章讲述了在AIX系统上,通过每隔一秒取样进程的调用堆栈,来查找导致磁盘满且进程运行缓慢的原因。经过分析,发现主要问题在于`writev`函数,提示可能是IO问题,并建议客户与IBM联系。总结中提到,这种取样方法通用且适用于release版本程序,无需深入研究AIX特定的性能工具。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



