Я знаю, что он делает ... Думаю, мне любопытно, почему он исправляет проблему в приложении, которое я унаследовал. Я взял на себя довольно большое приложение tomcat, которое выступает в качестве сервера Red5 для группы Flex-клиентов и обрабатывает множество данных о взаимодействии в реальном времени, которые в конечном итоге сбрасываются в rails api. Проблема находилась под большой нагрузкой с течением времени, число обращений к этим клиентам росло до 3-400 мс, где обычно <100 мс. Клиент подозревал, что это проблема памяти, которую мы действительно никогда не могли подтвердить. Однажды промежуточный сервер, на котором я выполнял нагрузочный тест, прекратил принимать запросы или работал очень медленно. По прихоти я послал
sync && echo 3 > /proc/sys/vm/drop_caches
и волшебным образом сервер вернулся к жизни и начал работать на полной скорости, обслуживая эти соединения. Было ли это совпадением или такое поведение имеет смысл и почему?
sync
илиecho
. Затем попытайтесь выяснить, почему сервер работает медленно в случаях, когда это исправляет (максимальный ЦП? Максимальный IO? Системный пейджинг?)Ответы:
Любой жесткий диск на несколько порядков медленнее вашей оперативной памяти, поэтому linux использует любую свободную оперативную память, которую вы можете использовать для кэширования данных файловой системы. Однако это никогда не должно вызывать проблем с производительностью, если с вашим жестким диском либо что-то не так, либо сервисы на вашем сервере пытаются записывать данные с такой высокой скоростью, пока сервер не сможет кешировать или извлечь данные. Это также может быть признаком того, что срок службы вашего жесткого диска подходит к концу.
Так или иначе:
man sync
покажет вам, что делает синхронизация [сбрасывает буферы FS]command1 && command2
разбивается на «если команда1 завершается успешно, тогда запускаем команду2»command1 || command2
aka 'если команда 1 завершится неудачей, тогда запустите команду 2'Команда, которую вам дали, в лучшем случае является временным исправлением и является признаком того, что что-то не так с вашей системой. Либо у ваших дисков закончился срок службы, либо ваша система слишком слаба для того, что вы с ней делаете, или и то, и другое .
источник
AWS не для слабонервных, и вы только что столкнулись с одной из причин, почему. Плохая ситуация с дисковым вводом / выводом в AWS хорошо известна, и это один из главных факторов, который следует учитывать при создании приложения поверх него. Существуют экземпляры, оптимизированные для дисков, и несколько других приемов (например, создание RAID 0 из томов EBS), которые можно попытаться улучшить. Убедитесь, что вы используете большие экземпляры (по крайней мере, m1.large), чтобы ядро могло буферизовать дисковый ввод-вывод.
источник