Я пытаюсь загрузить файл размером 580 МБ с помощью следующего простого wget
команда:
wget http://example.com/file.ext
На сервере установлено 16 ГБ оперативной памяти, и в течение всей загрузки использование памяти увеличивается с 10% до 99%.
Как это возможно, что для загрузки файла размером 580 МБ требуется более 14 ГБ ОЗУ?
Если вы не загружаете файл на /dev/shm
или tmpfs
Файловая система wget сама по себе не должна использовать гигабайты памяти. Черт возьми, оно не должно стоить даже мегабайт.
Маловероятно, что wget
потребляет столько памяти. Как вы проверяете его использование?
Если ты бежишь top -o RES
он будет отсортирован по использованию памяти (не разделяемой). Игнорировать VIRT
столбец, посмотрите на RES
столбец для размера. Если единица измерения (КБ, МБ, ГБ) не отображается, скорее всего, она отображается в КБ.
Ты можешь использовать ps aux
(или множество других конфигураций флагов), чтобы получить информацию об использовании памяти для каждого процесса. Посмотрите на RSS
столбец для размера не разделяемой памяти для процесса. Это сообщит размер в КБ.
Если это поможет, вот простой способ показать, сколько используется. Откройте два сеанса оболочки для вашего сервера. При первом запуске этот цикл while:
while true
do
ps -eo size,command | awk '/wget/&&!/ps.*awk/{print $1, "KB", $2}'
sleep 5
done
Во втором сеансе запустите wget command
. В первом сеансе терминала вы должны увидеть следующий результат:
$ bash loop.sh
516 KB wget
516 KB wget
516 KB wget
516 KB wget
... (so on and so forth until you CTRL-C out of the while loop)
Он будет работать ps
каждые пять секунд и сообщать вам, сколько именно памяти используется этим процессом.
Если он использует гигабайты памяти ... ну, что-то действительно, действительно не так с wget
или используемые им разделяемые библиотеки. В этот момент вам нужно обратиться к lsof
или strace
или другие подобные утилиты, чтобы выяснить, что не так.
Я подозреваю, что проблема в том, как просматривается память.
Предполагая, что используется Linux или аналогичная система, память состоит из двух частей - фактической памяти, используемой приложениями, и буфера / кеша. Я подозреваю, что вы видите заполнение буфера / кеш-памяти и показ мало свободной памяти - конечно, это несколько вводит в заблуждение, потому что как только это потребуется, память может быть перераспределена для других программ, которые в ней нуждаются.
IE Это не имеет ничего общего с WGET и полностью связано с тем, как Linux управляет памятью - это «в основном безвредно», поскольку память, используемая кешами / буферами, может быть восстановлена по запросу.