Suspiro 1 . Felizmente você não precisa de /proc/stat
/proc/loadavg
The first three fields in this file are load average figures giving the number of jobs in the run queue (state R) or waiting for disk I/O (state D) averaged over 1, 5, and 15 minutes. They are the same as the load average numbers given by uptime(1) and other programs. The fourth field consists of two numbers separated by a slash (/). The first of these is the number of currently runnable kernel scheduling entities (processes, threads). The value after the slash is the number of kernel scheduling entities that currently exist on the system. The fifth field is the PID of the process that was most recently created on the system.
Mas é provável que você precise consultar a fonte do link para determinar o que eles realmente usam:
net-snmp-5.7.3 / agent / mibgroup / ucd-snmp / loadave.c:
#elif defined(linux)
{
FILE *in = fopen("/proc/loadavg", "r");
if (!in) {
NETSNMP_LOGONCE((LOG_ERR, "snmpd: cannot open /proc/loadavg\n"));
return (-1);
}
Nota de rodapé 1. Às vezes você realmente não pode escolher com quem você trabalha.
Em resposta aos seus comentários, novamente, suspiro . Como somente o kernel está ciente do que está realmente fazendo, qualquer monitoração, de uma forma ou de outra, precisa interagir com o kernel para recuperar tais informações. A interface comum para interagir com o kernel é /proc/
embora outros métodos possam ser planejados também ( auditd
e kerneltap
vem à mente). Mas estes dificilmente são "mais leves" ...
Sempre haverá uma certa quantidade de efeito de observador e o impacto causado pelo monitoramento.
O único método de impacto zero é não fazer nenhum monitoramento. E quem tem pager pode alegar que, como nenhum alerta foi observado, o sistema também não está desligado. Eu chamaria isso de uma vitória!