На виртуальной машине Ubuntu iotop показывает мне, что некоторые процессы «apache2 -k start» производят общую чтение нагрузки на диск, постоянно составляющую от 4 до 7 M / с. даже если запросы не регистрируются.
lsof показывает мне около 5000 обычных файлов, используемых www-data. Как я могу определить, что является причиной такого большого количества операций ввода-вывода на диске, когда его не должно быть вообще?
Признаки большого количества операций ввода-вывода, скорее всего, потребуют использования инструмента отслеживания для более подробного изучения того, что представляет собой этот ввод-вывод; strace
это распространенный способ сделать это:
strace -e trace=file -ff -o output -y -p $some_httpd_pid_here
-e trace=file
отслеживает операции, связанные с файлами (есть и другие удобные спецификаторы, см. прекрасное руководство ), но не показывает read
вызовы, которые могут быть необходимы для определения того, из каких файловых дескрипторов считываются; для этого -e trace=open,read
или вместо этого просто проследите все, а затем выполните поиск вывода... -ff
следует за ответвлениями, хорошо, если порождается CGI или что-то подобное, или если вместо этого вы отслеживаете главный процесс httpd
в момент его запуска. -o output
взаимодействует с -ff
и создает файлы output
или output.*
, которые можно использовать позже. -y
не переносим на более старые версии strace
, но избавляет от необходимости выяснять, на какой файловый дескриптор номер 42 или на что ссылается. (strace
также может быть ужасно медленным; см. также Linux sysdig
или SystemTap
для альтернативных подходов к отслеживанию вещей или иной отладке того, что делает ядро...)