Я построил приложение в php, где функция анализирует около 10000 текстовых файлов, извлекает из них материал и помещает его в базу данных mysql. Сам код является просто циклом for, где каждый файл загружается через file_get_contents()
, а после окончания этой итерации unset()
из памяти. Анализ файла - это задание cron, и весь этот php-файл выполняет всю эту обработку.
Проблема, однако, в том, что приложение было построено (изначально) полностью на общем сервере, и все работало очень хорошо. Я не заметил каких-либо задержек или значительных задержек, как и пользователи, однако, чтобы он мог справиться с большей нагрузкой, я перенес все на сервер EC2 (микроэкземпляр).
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что каждый раз, когда я запускаю cronjob (обрабатываю файлы ежечасно), он тормозит весь сервер настолько, что загрузка обычной страницы занимает около 5-8 секунд, что приводит к поражению цель перемещения его в EC2.
Сам по себе cron - очень долгий процесс. Вот некоторые результаты тестов процесса скрипта (каждый час)
SQL Insertion Time: 23.138303995132 seconds
Memory Used: 10.05 MB
Execution: 411.00507092476 seconds
Но в начале каждого часа сервер сильно замедляется в течение 7 минут, несмотря на то, что у него более выделенное аппаратное ускорение по сравнению с общим сервером (я думаю, по крайней мере). Графики с панели мониторинга EC2 показывают, что загрузка ЦП близка к 100%, но я не понимаю, как она достигает этого уровня.
Может ли кто-нибудь помочь мне определить причину, по которой это может происходить? Я не заметил даже малейшей задержки, когда cron работает на общем сервере, но для EC2 ситуация совершенно иная.
Пожалуйста, не стесняйтесь спрашивать меня обо всем, что я пропустил, упоминая.