poll,
select,
epoll,
itimer,
futex,
nanosleep, and
signal).
However, in some systems, an excessive number of system calls
outside that small subset
might be responsible for time spent in the
kernel. If you suspect that an application is using
system calls excessively, you need to
identify the most frequently used system calls on the
system. To do this, use topsys.stp.
#! /usr/bin/env stap
#
# This script continuously lists the top 20 systemcalls in the interval
# 5 seconds
#
global syscalls_count
probe syscall_any {
syscalls_count[name] <<< 1
}
function print_systop () {
printf ("%25s %10s\n", "SYSCALL", "COUNT")
foreach (syscall in syscalls_count- limit 20) {
printf("%25s %10d\n", syscall, @count(syscalls_count[syscall]))
}
delete syscalls_count
}
probe timer.s(5) {
print_systop ()
printf("--------------------------------------------------------------\n")
}
global prom_arr
probe prometheus {
foreach (syscall in syscalls_count- limit 20)
prom_arr[syscall] = @count(syscalls_count[syscall])
@prometheus_dump_array1(prom_arr, "top_syscall_count", "name")
delete prom_arr
}
Example 5.17. topsys.stp Sample Output
--------------------------------------------------------------
SYSCALL COUNT
gettimeofday 1857
read 1821
ioctl 1568
poll 1033
close 638
open 503
select 455
write 391
writev 335
futex 303
recvmsg 251
socket 137
clock_gettime 124
rt_sigprocmask 121
sendto 120
setitimer 106
stat 90
time 81
sigreturn 72
fstat 66
--------------------------------------------------------------