Я попытался выполнить нагрузочный тест на MQTT с моего MACOS и смог успешно установить более 12 тысяч подключений, пока моя пропускная способность не исчерпана.
Я попытался выполнить тот же тест на машине GCP, и он дал мне исключение из-за тайм-аута соединения, когда открытые порты достигли 2048 и 2048 соединений с брокером MQTT.
При подключении мой ConnectionTimeout равен 100 с (ожидание подтверждения) и KeepAlive = 300 с (после установления соединения)
Эта проблема возникает независимо от программного обеспечения для нагрузочного тестирования, например, mzbench, jmeter и emqtt-bench. Итак, я думаю, что эта проблема связана с сервером Linux.
Я не стремлюсь достичь 1 миллиона открытых соединений, но ищу как минимум 30 тысяч открытых соединений.
Я уже пытался изменить ulimit, и это мои настройки ulimit
размер основного файла (блоки, -c) 0
размер сегмента данных (кбайт, -d) не ограничен
приоритет планирования (-e) 0
размер файла (блоки, -f) не ограничен
ожидающие сигналы (-i) 63887
максимальная заблокированная память (кбайт, -l) 64
максимальный размер памяти (кбайт, -m) не ограничен
открытые файлы (-n) 102400
размер канала (512 байт, -p) 8
Очереди сообщений POSIX (байты, -q) 819200
приоритет реального времени (-r) 0
размер стека (кбайт, -с) 8192
время процессора (секунды, -t) не ограничено
максимальное количество пользовательских процессов (-u) 200000
виртуальная память (кбайт, -v) не ограничена
блокировка файлов (-x) не ограничена
cat на proc также дает максимальный файл, открытый как 102400
также это значения, установленные в моем sysctl
fs.file-max = 200000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_mem = 50576 64768 98152
net.core.netdev_max_backlog = 2500
Изменить: добавлены сведения о машине и тестовый шаблон.
Тип машины: n2-highcpu-16 (16 виртуальных ЦП, 16 ГБ памяти)
Результат lscpu
Архитектура: x86_64
Режим работы процессора: 32-битный, 64-битный
Порядок байтов: Little Endian
ЦП: 16
Список процессоров в сети: 0-15
Количество потоков на ядро: 2
Количество ядер на сокет: 8
Розетка(и): 1
NUMA-узлы: 1
Идентификатор поставщика: GenuineIntel
Семейство процессоров: 6
Модель: 85
Название модели: ЦП Intel(R) Xeon(R)
Шаг: 7
ЦП МГц: 2800.200
БогоMIPS: 5600,40
Поставщик гипервизора: KVM
Тип виртуализации: полная
Кэш L1d: 32 КБ
Кэш L1i: 32 КБ
Кэш L2: 1024 КБ
Кэш L3: 33792 КБ
ЦП NUMA node0: 0-15
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat avx512_vnni md_clear arch_capabilities
Тестовый образец:
Открытие 200 соединений в секунду и ожидание подтверждения с постоянной скоростью.