以下脚本用户跟踪redis的主定时器事件serverCron的每次耗时
# sudo stap serverCronMs.stpprobe begin {printf("Start...\n");}global enterMsprobe process("/data/redis/src/redis-server").function("serverCron").call {enterMs = gettimeofday_ms();}probe process("/data/redis/src/redis-server").function("serverCron").return {nowMs = gettimeofday_ms();printf("serverCron enterMs:%\d, returnMs: %d, elapsed %ldms\n",enterMs, nowMs, nowMs - enterMs);}
输出如下:
kuiper@ubuntu-v64:/data$ sudo stap serverCronMs.stpStart...serverCron enterMs:1635072250022, returnMs: 1635072250022, elapsed 0msserverCron enterMs:1635072250123, returnMs: 1635072250123, elapsed 0msserverCron enterMs:1635072250224, returnMs: 1635072250224, elapsed 0msserverCron enterMs:1635072250325, returnMs: 1635072250325, elapsed 0msserverCron enterMs:1635072250426, returnMs: 1635072250426, elapsed 0msserverCron enterMs:1635072250527, returnMs: 1635072250527, elapsed 0msserverCron enterMs:1635072250628, returnMs: 1635072250628, elapsed 0msserverCron enterMs:1635072250728, returnMs: 1635072250728, elapsed 0msserverCron enterMs:1635072250829, returnMs: 1635072250829, elapsed 0msserverCron enterMs:1635072250929, returnMs: 1635072250929, elapsed 0msserverCron enterMs:1635072251030, returnMs: 1635072251030, elapsed 0msserverCron enterMs:1635072251131, returnMs: 1635072251131, elapsed 0msserverCron enterMs:1635072251232, returnMs: 1635072251232, elapsed 0msserverCron enterMs:1635072251333, returnMs: 1635072251333, elapsed 0msserverCron enterMs:1635072251434, returnMs: 1635072251435, elapsed 1msserverCron enterMs:1635072251535, returnMs: 1635072251535, elapsed 0msserverCron enterMs:1635072251635, returnMs: 1635072251636, elapsed 1ms
直方图每秒打印1次, 每次刚好10次serverCrop, 具体的分布情况 单位微秒
probe begin {printf("Start...\n");}global enterMsglobal sendsprobe process("/data/redis/src/redis-server").function("serverCron").call {//printf("******************************************************************\n");//enterMs = gettimeofday_us();}probe process("/data/redis/src/redis-server").function("serverCron").return {// nowMs = gettimeofday_us();// print_ubacktrace();// printf("%s\n", thread_indent(4));// printf("serverCron enterMs:%\d, returnMs: %d, elapsed %ldms\n",enterMs, nowMs, nowMs - enterMs);sends <<< gettimeofday_us() - @entry(gettimeofday_us())}probe timer.s(1) {print(@hist_log(sends));delete sends}
输出:
value |-------------------------------------------------- count16 | 032 | 064 |@@ 2128 |@ 1256 |@@@@@@ 6512 |@ 11024 | 02048 | 0value |-------------------------------------------------- count16 | 032 | 064 |@@@@@ 5128 |@ 1256 |@@@@ 4512 | 01024 | 0value |-------------------------------------------------- count8 | 016 | 032 |@@@@ 464 | 0128 | 0256 |@@@@@ 5512 |@ 11024 | 02048 | 0
