Мои сценарии используют wget для получения данных из Интернета. Когда многие пользователи используют этот сценарий, у меня очень высокая нагрузка (около 20,00) из-за дискового ввода-вывода. Wget автоматически запускается cron каждый час. Я хотел бы ограничить использование одного wget одним клиентом одновременно. Как это сделать?
Я использую 64-разрядную версию CentOS 5.7.
Вы можете добавить в свой скрипт блокировку файла. Например, с помощью команды flock (пакет util-linux в Debian):
$!/bin/sh
(
flock --nb 200 || echo "waiting for previous script completion"
flock 200
# script commands here
wget ....
) 200>$HOME/.wgetlock
Если это один и тот же запрос и один и тот же контент, просто кешируйте результат на несколько секунд и обслуживайте один и тот же контент для разных пользователей.
Вы можете использовать memcache, чтобы реализовать это достаточно легко.
Если содержимое различается для каждого пользователя, имейте в виду, что постановка в очередь, как вы просите, приведет к длительным задержкам.
Ознакомьтесь с вариантами, доступными вам в /etc/security/limits.conf
. Вы можете установить ограничения для каждого пользовательского процесса и памяти.