Команда sync в linux
Я знаю, что он делает . Наверное, мне любопытно, почему он исправляет проблему в приложении, которое я получил. Я взял на себя довольно большое приложение tomcat, которое работает как сервер Red5 для множества гибких клиентов и обрабатывает много данных взаимодействия в реальном времени, которые в конечном итоге выгружаются на rails api. Проблема была в значительной степени из-за нагрузки с течением времени, что данные для этих клиентов росли до 3-400 мс, где обычно это & lt; 100 мс. Клиент подозревал, что это проблема памяти, которую мы действительно никогда не могли подтвердить. Однажды на промежуточном сервере я выполнял нагрузочный тест на базовом прекращении приема запросов или был очень медленным. По прихоти, которую я отправил
sync && echo 3 > /proc/sys/vm/drop_caches
и волшебным образом сервер ожил и начал работать на полной скорости, поддерживая это соединение. Было ли это совпадением или это поведение имеет смысл и почему?
2 ответа
Любой жесткий диск на порядок медленнее, чем ваша оперативная память, поэтому Linux использует любую свободную RAM, которую вы могли бы плавать, чтобы кэшировать данные файловой системы. Однако это никогда не должно приводить к проблемам с производительностью, если на вашем жестком диске что-то не так, или службы на вашем сервере пытаются записывать данные с такой высокой скоростью настолько долго, что сервер не может кэшировать или извлекать данные. Это также может быть признаком того, что ваш жесткий диск достигает конца своей жизни.
- running man sync расскажет вам, что делает синхронизация [flushes FS buffers]
- googling 'linux drop_caches' скажет вам, что эхо номера 3 в него освобождает все ненужные страницы памяти из кеша [это не обязательно для здоровой системы]
- command1 && command2 разбивается на «если команда1 успешно завершается, а затем запускает команду2»
- партнер для этого command1 || command2 aka ', если command1 не работает, тогда запустите command2'
Команда, которую вы получили, - это временное исправление в лучшем случае и является симптомом чего-то еще неправильного в вашей системе. Либо ваши диски находятся на конце жизни, либо ваша система слишком недостаточно для того, что вы делаете с ней, или обе .
AWS не для слабонервных, и вы столкнулись только с одной из причин. Плохая ситуация с дисковым вводом-выводом на AWS хорошо известна и является одним из основных факторов, которые следует учитывать для тех, кто строит приложение поверх него. Есть примеры с оптимизацией диска и несколько других трюков (например, создание RAID 0 из томов EBS), которые вы можете попытаться улучшить. Обязательно используйте более крупные экземпляры (по крайней мере, m1.large), чтобы гарантировать, что ядро может выполнять буферизацию ввода-вывода.
Читайте также: