Я занимаюсь планированием емкости, и мне было интересно, есть ли формула, которую я мог бы использовать, чтобы предсказать (с точки зрения памяти), сколько TCP-соединений я мог бы обработать на моем сервере. На данный момент меня интересуют только требования к памяти.
Некоторые переменные, которые, я думаю, будут отображаться в формуле:
- sysctl
net.ipv4.tcp_wmem
(мин или значение по умолчанию) - sysctl
net.ipv4.tcp_rmem
(мин или значение по умолчанию) - размер sock, sock_common, proto и других структур данных для каждого сокета.
Я не уверен, сколько из tcp_wmem и tcp_rmem фактически выделено и когда выделяется эта память. Во время создания сокета? По требованию?
tcp_mem более важен, потому что он определяет, как должен вести себя стек tcp, когда речь идет об использовании памяти. Буфер отправки и получения IMO должен быть кратным tcp_mem. Вот ссылка на формулу для буфера приема: http://www.acc.umu.se/~maswan/linux-netperf.txt . Короче говоря:
Вот что говорится в статье о tcp_mem:
IMO большее среднее значение tcp_mem ускоряет соединение при потере меньшей безопасности и немного увеличивает использование памяти.
Вы можете контролировать сетевой стек с помощью:
источник
Дэвид дал очень хороший ответ на заданный вопрос, однако, если вы не используете исключительно LFN , то даже на сервере, основанном на событиях, буферы TCP, вероятно, будут лишь малой частью площади каждого соединения.
Для планирования емкости нет альтернативы тестированию сервера и вычислению регрессии использования памяти под нагрузкой.
источник