Назад | Перейти на главную страницу

Что делает команда синхронизации?

Я знаю, что он делает ... Думаю, мне любопытно, почему он устраняет проблему в приложении, которое я унаследовал. Я взял на себя довольно большое приложение tomcat, которое действует как сервер Red5 для группы гибких клиентов и обрабатывает множество данных взаимодействия в реальном времени, которые в конечном итоге передаются в api rails. Проблема была из-за большой нагрузки, с течением времени отклики для этих клиентов росли до 3-400 мс, а обычно <100 мс. Клиент подозревал, что это проблема с памятью, которую мы никогда не могли подтвердить. Однажды промежуточный сервер, на котором я запускал нагрузочный тест, в основном перестал принимать запросы или работал очень медленно. По прихоти я отправил

sync && echo 3 > /proc/sys/vm/drop_caches

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

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

Во всяком случае:

  • Бег man sync расскажет, что делает синхронизация [очищает буферы FS]
  • Поиск в Google 'linux drop_caches' сообщит вам, что повторение числа 3 освобождает все ненужные страницы памяти из кеша [это не обязательно в здоровой системе]
  • command1 && command2 прерывается до 'если команда1 завершается успешно, запускать команду2'
    • партнер для этого command1 || command2 aka 'если команда 1 не работает, запустите команду 2'

Данная вам команда - временное исправление в лучшем случае и является признаком того, что с вашей системой что-то не так. Либо у ваших дисков закончился срок службы, либо ваша система слишком слабая для того, что вы с ней делаете, либо обе.

AWS не для слабонервных, и вы только что столкнулись с одной из причин, почему. Плохая ситуация с дисковым вводом-выводом в AWS хорошо известна и является одним из основных факторов, которые следует учитывать любому, кто создает приложение на ее основе. Есть экземпляры, оптимизированные для дисков, и несколько других приемов (например, создание RAID 0 из томов EBS), которые вы можете попытаться улучшить. Обязательно используйте более крупные экземпляры (по крайней мере, m1.large), чтобы ядро ​​могло буферизовать дисковый ввод-вывод.