本篇文章也是我在解决客户问题时的一些思路,希望对读者有用。
本文与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 ! kill -0 "$process_id" 2>/dev/null; then
echo "Process $process_id has exited."
break
fi
date >