sz
и vsz
представьте то же самое, но sz
находится в единицах страницы, в то время как vsz
находится в 1 024-байтовых единицах.
Для получения размера страницы системы можно использовать:
$ getconf PAGE_SIZE
4096
rss
подмножество памяти процесса, которая в настоящее время загружается в RAM (в килобайтах). Это обязательно меньше, чем vsz
.
Таким образом, "математические" соединения:
vsz * 1024 = sz * page_size
rss <= vsz
След на LAN является функцией BIOS и NIC, не функцией OS, то есть, Вам нужна поддержка BIOS и NIC, чтобы сделать это.
После того как Вы включили его в своем BIOS (если Вы можете), можно проверить, имеет ли NIC поддержку WOL, включенную путем проверки вывода ethtool [interface]
.
Если значение Supports Wake-on
содержит g
, Ваш NIC поддерживает волшебные пакеты WOL.
Чтобы проверить, включено ли это на самом деле, смотрите на значение Wake-on
. Если это содержит g
, Вашему NIC включили волшебную пакетную поддержку.
Если это не включено, выполните следующее:
ethtool -s [interface] wol g
Необходимо будет дать эту команду каждый раз, когда система запускается, поэтому добавьте его к соответствующему месту. В Ubuntu возможно, лучшее место было бы как up
правило в /etc/network/interfaces
, или эквивалент для Вашего администратора сети.
Я знаю, что об этом спрашивали год назад, но я нашел несколько решений. Первое из них использует powernap
и скрипт для проверки конкретных запущенных процессов, и его можно найти здесь .
Вторым, который я увидел в интернете, были линуксовые вопросы . При этом используется пинг на другой машине.
Я также прошил маршрутизатор с DD-WRT, чтобы попробовать - на dd-wrt wiki . Это очень хорошее элегантное решение, но проблема в том, что они не подходят для внутреннего медиа-сервера, так как журнал ловит только принятые пакеты из-за пределов сети. Если вам нужен только внутренний медиа-сервер, это просто не работает.
Для dd-wrt это предлагает действительно хорошее решение с использованием VLAN. В основном, поместите сервер в его собственную внутреннюю подсеть и отслеживайте трафик в эту VLAN, тогда предыдущий скрипт работает. Это хорошо работает, но по моему опыту роутер и сборка dd-wrt всякий раз, когда я использовал функцию vlan DHCP, разбивались.
Я решил, что мне нужно решение для автоматического пробуждения и приостановки моего медиа-сервера при обращении к нему, которое не зависело бы от dd-wrt. У меня есть малиновый пи, поэтому я использовал его. Окончательным решением, которое я нашел для себя, было написание небольшого бэш-скрипта. Зависимости малинового пи - это etherwake и tcpdump. Обе не установлены по умолчанию на малине.
sudo apt-get install etherwake
sudo apt-get install tcpdump
Сценарий wake выглядит следующим образом:
#!/bin/bash
pingInterval=60 #time interval, in seconds, between checks that the server is still awake.
target=192.168.x.x #WOL target ip address
targetMAC=00:11:22:33:44:55 #WOL target MAC
wake () {
tcpdump -i eth0 -c 1 -p host $target
etherwake $targetMAC
#echo WOL sent to $target at $targetMAC
return
}
while sleep $pingInterval; do
varPing=`ping -s 1 -c 2 $target > /dev/null; echo $?`
if [ $varPing -eq 0 ]; then
#echo ping success
else
#echo ping fail
wake
fi
done
Основная идея заключается в том, что он выполняется из моей малины-pi, которая разбудит сервер, если заметит единственный arp-запрос для сервера. Если сервер проснулся, то он не будет прослушивать arp запрос, а будет посылать несколько пингов время от времени, чтобы убедиться, что он все еще не спит.
Я назвал файл wol.sh и сделал его исполняемым. Затем поместите его в sudo crontab, чтобы запустить @reboot от имени root. Это для tcpdump, который нуждается в повышенном доступе для прослушивания eth0 и etherwake.
sudo chmod +x /home/pi/wol.sh
sudo crontab -e
Добавьте это в нижнюю часть
@reboot sh /home/pi/wol.sh > /dev/null
Сценарий сна выполняется с медиа-сервера по тому же принципу. Если во время сканирования отсутствует трафик к серверу (исключая icmp или arp), я выбрал 1 минуту. Затем он добавляет к счетчику, который я назвал "сонливость". После того, как сонливость достигнет 10 или 20, что означает, что у него не было трафика в течение 20 минут, затем он устанавливает сонливость на ноль, после чего он выдает команду pm-suspend
, чтобы заснуть. Он пакеты получены и сонливость!=0
, то он делает сонливость -1. Таким образом, если он захватывает бродячий пакет или как вы делаете это от маршрутизатора, он не будет сбрасывать счет обратно на ноль, а просто сделать -1 от счетчика. Я поместил это туда, потому что это позволяет льготный период мягкого засыпания по мере уменьшения пакетов в течение некоторого времени, вместо того, чтобы иметь абсолютно нулевые пакеты в течение 20 последовательных минут.
Возможно, это не лучший вариант, потому что он должен вызывать tcpdump на обеих машинах, Involves constant записывает на диск (сторона сервера). Для записи на диск я смонтировал жертвенный USB и именно там сохраняется мой файл захвата, чтобы предотвратить износ моего фактического жесткого диска.