Создание больших файлов связывает память после завершения процесса

Я использую сервер Ubuntu 14.04LTS (AWS EC2) для создания пользовательского дампа базы данных, но получаю очень странное поведение памяти.

Я использую сценарий CLI PHP для циклического выполнения пользовательского запроса дампа, который выводит в пронумерованный файл, а затем cat этот файл в выходной файл. Использование памяти растет, как и ожидалось, из-за mysql. Файл дампа mysql и выходной файл записываются на отдельный смонтированный диск (EBS).

Перед запуском сценария использование памяти составляет около 20%. По завершении процесса использование памяти составляет около 90%, как показано на графиках в htop . Я проверил использование с помощью free -m . После перезапуска mysql потребление памяти снижается примерно до 50%.

Я использовал lsof , чтобы убедиться, что файл не используется. Я даже сделал lsof в каталоге и получил только мой процесс bash и lsof.

Действительно странно то, что как только я удаляю файл, использование памяти падает до 20%.

] Я попытался удалить файл без перезапуска mysql, и его использование упало на 30%, как ожидалось выше.

Использование скрипта просмотра памяти, найденного здесь , не показывает такое же использование памяти, поэтому я предполагаю, что это не совсем точно. Он не показывает потребление памяти при сохранении файла.

Есть ли другой способ узнать, что удерживает память?

2
задан 10 May 2016 в 23:59
1 ответ

На самом деле вы смотрите на использование кэша диска системой. Все современные системы будут кэшировать операции с диском, чтобы ускорить повторный доступ к одной и той же области диска.

Считается, что этот процесс кэширования требует очень мало ресурсов из-за частых преимуществ, которые он может принести позже. Поскольку система знает, что кэш не важен по сравнению с любыми другими требованиями к памяти,он мгновенно сбрасывает его части, если они понадобятся для чего-то еще.

Вы также замечаете внутреннее кэширование серверного процесса MySQL, которое будет действовать аналогично кеш-памяти операционной системы, но ОС не распознает это как кеш, который вот почему он освобождается только в результате операций, выполняемых самим серверным процессом, таких как его перезапуск.

3
ответ дан 3 December 2019 в 10:38

Теги

Похожие вопросы