LINUX.ORG.RU
решено ФорумAdmin

top выводит сильно неверную информацию


0

1

установлен мониторинг nagios, который отсылает уведомление по событиям. начало слаться уведомление, что занято 98% оперативной памяти. я лезу на сервак и смотрю:

top - 18:31:33 up 3 days,  4:53,  5 users,  load average: 0.64, 0.71, 0.63
Tasks: 317 total,   2 running, 313 sleeping,   0 stopped,   2 zombie
Cpu(s):  0.5%us,  0.3%sy,  0.0%ni, 99.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65957568k total, 65055844k used,   901724k free,   630956k buffers
Swap: 32978780k total,     5268k used, 32973512k free, 54761068k cached

после чего лезу в htop и вижу: Mem: 9444/64411; Swp: 5/32205 - цифры которые реально походят на правду, поскольку нагрузки на сервак такой как в top нету.

почему top мне врет и что с ним происходит? соответственно главный вопрос - откуда nagios считывает использование оперативной памяти и как это место поправить на корректное количество занятой оперативки

linux mint 13



Последнее исправление: post-factum (всего исправлений: 1)

откуда nagios считывает использование оперативной памяти

Дык посмотри скрипт его ручками и увидишь.

tazhate ★★★★★
()

cat /proc/meminfo

anonymous
()
Ответ на: комментарий от true_admin

всем спасибо, мозги вправили, я со всем справился =)

единственный вопрос - как сконвертировать вот это в перл?:)

free -k | grep "buffers/cache" | awk {'print $4'}

bykva
() автор топика
Ответ на: комментарий от bykva

не силён в перле, но покажи что было до этого, думаю я смогу адаптировать для перла. Хотя, можно тупо проверялку переписать на знакомый тебе яп :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin
 if ($DataInLine[0] eq 'MemFree') {
                        if( length($DataInLine[1]) > 2) { $MemFree = substr($DataInLine[1], 0, length($DataInLine[1])-2); }
                        else { $MemFree = $DataInLine[1]; }

они считывают значение памяти из /proc/meminfo и заносят в переменную. я хочу просто после функции перезаписать в переменную правильное число, считанное с помощью free. таки на баше я знаю как это сделать а в перле - нет =( мне подсказали такие варианты:

perl -e "$p = `free -k | grep "buffers/cache" | awk {'print $4'}`; print $p"
и
perl -E'say((split(/\s+/,(`free -k`)[2]))[3])'
но эти строчки выводят на экран в консоли (и то только вторая), а в скрипте перл ругается на say...

bykva
() автор топика
Ответ на: комментарий от bykva

проблема решена. исправил в скрипте $FreeMem = (split(/\s+/,(`free -k`)[2]))[3]; nagios стал выдавать правильную информацию. всем спасибо

bykva
() автор топика
Ответ на: комментарий от true_admin

понимаешь, мне не надо это на экран выводить, а надо в переменную вогнать, но всеравно спасибо что откликнулся

bykva
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.