如何监控内核执行的系统调用数量?

问题描述 投票:0回答:5

我需要监控Linux执行的系统调用量。 我知道 vmstat 能够在 BSD 和 AIX 系统上显示这一点,但对于 Linux 则不能(根据手册页)。

/proc
有柜台吗?或者有其他方法可以监控吗?

linux statistics kernel monitoring system-calls
5个回答
8
投票

我编写了一个简单的 SystemTap 脚本(基于 syscalls_by_pid.stp)。 它产生这样的输出:

ProcessName          #SysCalls

munin-graph          38609 
munin-cron           8160  
fping                4502  
check_http_demo      2584  
check_nrpe           2045  
sh                   1836  
nagios               886   
sendmail             747   
smokeping            649   
check_http           571   
check_nt             376   
pcscd                216   
ping                 108   
check_ping           100   
crond                87    
stapio               69    
init                 56    
syslog-ng            27    
sshd                 17    
ntpd                 9     
hp-asrd              8     
hald-addon-stor      7     
automount            6     
httpd                4     
stap                 3     
flow-capture         2     
gam_server           2     

Total                61686

脚本本身:

#! /usr/bin/env stap

#
# Print the system call count by process name in descending order.
#

global syscalls

probe begin {
  print ("Collecting data... Type Ctrl-C to exit and display results\n")
}

probe syscall.* {
  syscalls[execname()]++
}

probe end {
  printf ("%-20s %-s\n\n", "ProcessName", "#SysCalls")
  summary = 0
  foreach (procname in syscalls-) {
    printf("%-20s %-10d\n", procname, syscalls[procname])
    summary = summary + syscalls[procname]
  }
  printf ("\n%-20s %-d\n", "Total", summary)
}

2
投票

您可以使用 Jeff Foster 所说的 pstrace 来跟踪系统调用。

此外,您还可以使用 strace 和 ltrace

strace - 跟踪系统调用和信号

ltrace - 库调用跟踪器


1
投票

您可以使用

ptrace
监控所有系统调用(请参阅此处


1
投票

我相信OProfile可以做到这一点。


0
投票

我不知道有一种集中的方式来监控整个操作系统的系统调用。也许对

ptrace
流程进行
init
并关注所有孩子?但我不知道这是否有效。

最好的办法是给内核本身编写一个补丁来做到这一点。我见过的与此最接近的东西是 cgroup 实现,用于对可以在运行时执行的系统调用强制执行权限。您可以在这里找到补丁:

https://github.com/luksow/syscalls-cgroup

从内核编程的角度来看,在其中添加一个计数器应该不会有太多工作。

© www.soinside.com 2019 - 2024. All rights reserved.