用取样思想一探AIX上进程性能瓶颈

本篇文章也是我在解决客户问题时的一些思路,希望对读者有用。

本文与GDB也与DBX(AIX上的调试工具)无关,只是用到了前文《GDB技巧》中的思想:取样思想

客户问题:

原始问题是磁盘被占满了,通过调查得知有个我们的进程刷数据刷的特变慢,于是就得查这个进程到底慢在哪?

解决方案:

通过每隔一秒取样当时的callstack,然后统计下谁最耗时。

AIX上可以用dbx取得callstack,但有现成的procstack能直接用,免得麻烦了。

写一个简单的shell script:

#!/bin/sh

# Usage: ./call_stack.sh 
# Target: Get call stack of process every second

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 "
    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 >>/tmp/callstack.out
    procstack "$process_id" >>/tmp/callstack.out

    sleep 1
done

最后一统计第一层的函数竟然是writev占绝对优势, 是IO方面的问题,所以请求客户与IBM联系去了。

总结

也许AIX上有现成的像Linux上perf这样的工具? 我不得而知,但我直接用了适用于各种平台的大法:取样,不必去研究AIX上的性能工具了,而且适用于release版本程序。

你可能感兴趣的:(GDB技巧,linux,各式各样客户问题,linux,AIX,GDB,调试)