我想使用systemtap來提取我的linux生產服務器的細節。我的SystemTap腳本systemtap全局變量分配失敗
global bt;
global quit = 0
probe begin {
printf("start profiling...\n")
}
probe timer.profile {
if (pid() == target()) {
if (!quit)
{
bt[backtrace(), ubacktrace()] <<< 1
}
else
{
foreach ([sys, usr] in bt- limit 1000)
{
print_stack(sys)
print_ustack(usr)
printf("\t%d\n", @count(bt[sys, usr]))
}
exit()
}
}
}
probe timer.s(20) {
quit = 1
}
當我開始使用命令
sudo stap --ldd -d $program_name --all-modules \
-D MAXMAPENTRIES=10240 -D MAXACTION=20000 -D MAXTRACE=40 \
-D MAXSTRINGLEN=4096 -D MAXBACKTRACE=40 -x $program_pid \
profile.stp --vp 00001 > profile.out
它失敗,並打印運行此腳本以下錯誤:
ERROR: error allocating hash
ERROR: global variable 'bt' allocation failed
WARNING: /usr/bin/staprun exited with status: 1
我的生產服務器內存的信息是
total used free shared buffers cached
Mem: 16008 15639 368 0 80 3090
-/+ buffers/cache: 12468 3539
我認爲這是不夠的,因爲在我的測試服務器,只有2G內存和SystemTap的腳本運行良好的另一臺服務器
我的linux內核是2.6.18-308.el5,Linux是CentOS的5.5,systemstap版本1.8/0.152非git來源 – user2366736