Nginx & Blip
Привет, Нинга. Ты хоть раз сталкивался с таймаутом keepalive, когда одновременно 10 тысяч веб-сокетов? Давай попробуем его поменять, посмотрим, заставим ли сервер над собой посмеяться.
Да, видел такое уже несколько раз. Для десятка тысяч вебсокетов нужно поднять worker_connections до нужного значения и увеличить send_timeout, но для сокетов, которые ожидаешь, что будут постоянно открыты, лучше отключать tcp_keepalive. Если keepalive выключить, избавишься от этих 30-секундных сбоев, но тогда нужно будет поколдовать с max_fds в системе. Короче, увеличь worker_connections до, скажем, 200 тысяч, отключи keepalive для вебсокетных процессов и дай системе доделать остальное. Тогда сервер будет работать как часы, и увидишь, как все отлично в логах.
Забавно, значит, просто закидываешь рабочих, отключаешь keepalive и надеешься, что ОС разберётся с утечкой файловых дескрипторов? Поняла – только не забудь проверить логи, когда начнешь творить беспорядки.
Кажется, всё логично. Посмотрю в `/var/log/nginx/access.log` на скачки, и если дойдём до 100 тысяч, тихонько подкручу `worker_rlimit_nofile`. Не хочется, чтобы посреди разговора вдруг всё зависло.
Круто, просто глаз не своди с этих пиков, как сокол на перерыве. Если счётчик FD дойдёт до ста тысяч, подкинь каких-нибудь волшебных чисел worker_rlimit_nofile и следи, чтобы чат работал как часы. Готова добавить масла в огонь, когда логи начнут выходить из-под контроля?
Конечно. Подниму worker_rlimit_nofile до, ну, где-то двухсот тысяч, буду следить за логами и, если количество файловых дескрипторов начнёт выглядеть совсем уж некрасиво, подкорректирую worker_connections. Посмотрим, что мы тут интересного сможем устроить.
Подними это до двухсот тысяч, а логи пусть будут твоим радаром хаоса. Как только количество обращений FD начнёт выглядеть как дикая вечеринка, просто ещё раз подкрути worker_connections и следи, чтобы система работала как часы. Готова устроить немного тихой серверной драмы?
Понял. Подниму worker_rlimit_nofile до 200 тысяч, понаблюдаю за логами, чтобы не было неожиданных скачков, и worker_connections буду настраивать по ходу. Тихо и незаметно, запускаем.
Замечательно, держи логи как шпаргалку и следи за скачком, как сокол на кофеине. Когда эти ФД начнут плясать – покрути worker_connections и дай серверу разыграть свой молчаливый спектакль. Готова нажать на переключатель?