У мене невелика установка VPS з nginx. Я хочу витіснити якомога більше продуктивності, тому я експериментував з оптимізацією та тестуванням навантаження.
Я використовую Blitz.io для тестування завантаження, отримавши невеликий статичний текстовий файл, і зіткнувся з незвичайною проблемою, коли сервер, як видається, надсилає TCP скидання, як тільки кількість одночасних підключень досягне приблизно 2000. Я знаю, що це дуже велика кількість, але від використання htop-сервера все ще є достатньо запасу часу та пам'яті процесора, тому я хотів би розібратися в джерелі цього питання, щоб побачити, чи зможу я ще більше просунути його.
Я працюю на Ubuntu 14.04 LTS (64-розрядний) на 2 ГБ Linode VPS.
У мене недостатньо репутації, щоб опублікувати цей графік безпосередньо, тому ось посилання на графік Blitz.io:
Ось те, що я зробив, щоб спробувати з’ясувати джерело проблеми:
- Значення конфігурації nginx
worker_rlimit_nofile
встановлено на 8192 - вже
nofile
встановлені в 64000 для твердих і м'яких обмежень дляroot
іwww-data
користувача (то , що Nginx працює як) в/etc/security/limits.conf
немає жодних ознак, в чому щось не
/var/log/nginx.d/error.log
такУ мене налаштування ufw, але немає обмежувальних норм. Журнал ufw вказує, що нічого не блокується, і я спробував відключити ufw з тим же результатом.
- Показових помилок у програмі немає
/var/log/kern.log
- Показових помилок у програмі немає
/var/log/syslog
Я додав наступні значення
/etc/sysctl.conf
і завантажував їхsysctl -p
без ефекту:net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
Будь-які ідеї?
EDIT: Я зробив новий тест, розширивши 3000 підключень у дуже маленькому файлі (всього 3 байти). Ось графік Blitz.io:
Знову ж таки, за словами Бліц, всі ці помилки - це помилки "скидання з’єднання TCP".
Ось графік пропускної здатності Лінода. Майте на увазі, що це середня 5 хвилин, тому низький прохід фільтрується трохи (миттєва пропускна здатність, ймовірно, набагато вище), але все-таки це нічого:
ЦП:
I / O:
Ось htop
під кінець тесту:
Я також захопив частину трафіку за допомогою tcpdump за іншим (але схожим на вигляд) тестом, починаючи захоплення, коли почалися входи помилки:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
Ось файл, якщо хтось хоче його подивитися (~ 20 МБ): https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=sharing
Ось графік пропускної здатності від Wireshark:
(Рядок - це всі пакети, сині смужки - помилки TCP)
З моєї інтерпретації захоплення (і я не експерт), схоже, що прапорці TCP RST надходять із джерела тестування навантаження, а не з сервера. Отже, якщо припустити, що щось не так на стороні служби тестування навантажень, чи можна з впевненістю вважати, що це результат певного управління мережею або зменшення DDOS між службою тестування навантаження та моїм сервером?
Дякую!
net.core.netdev_max_backlog
2000? У кількох прикладах я бачив, що це на порядок вище для гігабітних (і 10Gig) з'єднань.