本文主要是介绍用取样思想一探AIX上进程性能瓶颈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本篇文章也是我在解决客户问题时的一些思路,希望对读者有用。
本文与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 secondif [ "$#" -ne 1 ]; thenecho "Usage: $0 <process_id>"exit 1
fiprocess_id="$1"while 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版本程序。
这篇关于用取样思想一探AIX上进程性能瓶颈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!