У нас есть веб-приложение Django, которое обслуживает умеренное количество пользователей, работающих на машине Ubuntu с 8 ядрами и не менее 32 ГБ оперативной памяти. У нас нет проблем с подключением пользователей через их браузер. Однако на бэкэнд (на том же сервере) мы также запускаем скрученный сервер. Django webapp пытается подключиться к нашему скрученному серверу, но после примерно 1100-1200 таких подключений (включая кучу постоянных подключений к другим устройствам на бэкэнд) все соединения начинают таймаут. Наш скрученный сервер работал отлично при низкой нагрузке, но теперь сервер, похоже, не может обрабатывать какие-либо новые соединения из Django. Время ожидания всех подключений. Мы не видим ничего плохого в нашем коде (который мы работаем уже пару лет, поэтому он должен быть довольно стабильным). Мы уже установили наши мягкие и жесткие ulimits в /etc/security/limits.conf до 50000/65000, и мы увеличили количество сомакс до 65536. Печать лимитов для нашего скрученного процесса приведена ниже. Общее количество файлов в процессах tope 25 составляет чуть более 5000. К сожалению, мы по-прежнему не можем получить более 1100-1200 одновременных подключений к нашему скрученному серверу. На что мы должны обратить внимание, чтобы наши витые соединения снова начали соединяться? Существуют ли другие параметры sysctl или других Ubuntu Linux, которые нам необходимо изменить? Нужны ли измененные параметры?Тайм-аут витой связи при большой нагрузке
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 465901 465901 processes
Max open files 50000 65000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 465901 465901 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
Машина (на самом деле VM) имеет 8 ядер. Когда я запускаю htop, это показывает, что средняя нагрузка на каждое ядро составляет около 20-30%. Список процессов в htop показывает, что в одном процессе всегда используется около 150% CPU. Среднее значение нагрузки составляет 1,48, 1,50, 1,40. Является ли эта нагрузка распределена по всем ядрам или эта нагрузка означает, что мне нужно разделить процесс на несколько процессов? – Marc
Мы также регистрируем различные вещи, и файлы журналов показывают, что реактор не виснет. Когда загрузка уменьшается, все работает нормально, но когда больше клиентов подключается, сокетные соединения начинают отсчет времени. Любые другие идеи? – Marc
Что касается того, как Django создает соединения, он делает их с помощью модуля telnetlib python. – Marc