Заголовок этого вопроса представляет мою основную озабоченность, но если вы будете читать дальше раздела вопроса , вы найдете некоторую предысторию нашей установки .. которая может быть или не быть релевантно / полезно.
Мы проводим стресс-тестирование нашего приложения с использованием Gatling и запускаем сценарий Gatling на единственной машине. Мы' повторно обнаружив, что наше приложение способно справиться с высокой нагрузкой, создаваемой инструментом для снятия напряжения; однако он не справляется с относительно небольшой нагрузкой от реальных пользователей.
Мой вопрос: какой вид оптимизации или оптимизации на уровне ОС / сети происходит, когда параллельные запросы выполняются с одной машины / ОС в приложение, по сравнению с одновременными запросами с нескольких машин (т. Е. Обычных пользователей, использующих свои веб-браузеры)?
У нас есть приложение Tomcat, которое находится за Apache через AJP, которое само находится за Citrix Netscaler через порт 80 (мы также планируем исключить Apache из уравнения, но это другое дело ...).
Наше приложение зависало при относительно низкой нагрузке (соединение CLOSE_WAIT между apache и tomcat), и мы re находится в процессе нагрузочного тестирования, чтобы решить проблему. Взаимоблокировки, возникающие в нашем экземпляре SQLServer, возникали довольно часто, поэтому мы решили начать с них. Чтобы воспроизвести проблему и впоследствии протестировать наши исправления, мы используем одну машину для генерации нагрузки с помощью Gatling.
Когда мы только начинали, мы могли надежно воспроизводить тупиковые ситуации с помощью этого инструмента. После некоторой оптимизации тупиковые ситуации исчезли, как и соединения CLOSE_WAIT. Затем мы запустили приложение в нагрузку, которой мы были очень довольны, и оно работало без каких-либо серьезных сбоев.
К сожалению, когда исправления были применены к производственной системе, мы все еще наблюдали такое же исходное поведение. Это заставляет меня задуматься, не является ли нагрузка, создаваемая инструментом стресса, хорошим представлением того, что? на самом деле происходит в реальном мире из-за того, что он исходит из одного источника, а не из множества различных клиентов, разбросанных по Интернету .
വ്യത്യസ്ത ക്ലയന്റുകളേക്കാൾ ഒരൊറ്റ ലോഡ് ജനറേറ്റർ കണക്ഷൻ പൂളിംഗിന്റെ മികച്ച ജോലി ചെയ്യും; ഉദാഹരണത്തിന് കീപാലൈവുകളുടെ മികച്ച ഉപയോഗം. കുറഞ്ഞ കണക്ഷനുകളിലൂടെ ഇത് കൂടുതൽ അഭ്യർത്ഥനകൾ നടത്തുന്നു.
റ round ണ്ട് റോബിൻ ഡിഎൻഎസ് ഉൾപ്പെട്ടിട്ടുണ്ടെങ്കിൽ, അവയിലുടനീളം ലോഡ് വ്യാപിപ്പിക്കുന്നതിനുപകരം ഡിഎൻഎസ് ലക്ഷ്യസ്ഥാനങ്ങളിലൊന്നിൽ മാത്രം ഇടിക്കുന്ന പ്രവണതയുണ്ട്. ചില ലോഡ് ബാലൻസറുകൾ ക്ലയൻറ് ഐപിയെ അടിസ്ഥാനമാക്കി സ്റ്റിക്കിനെസ് തീരുമാനങ്ങൾ എടുക്കുന്നു, അത് ഈ സാഹചര്യത്തിൽ സ്ഥിരമായിരിക്കും.
നിങ്ങളുടെ ലോഡ് ജനറേറ്ററിന് ഒരു നിർവ്വഹണ എക്സിക്യൂഷൻ പൂൾ ഉണ്ടായിരിക്കാം (പറയുക, 200 'ഉപയോക്താക്കൾ') അതിനാൽ പ്രതികരണത്തിലെ ലേറ്റൻസി ഉപയോക്താക്കളെ മന്ദഗതിയിലാക്കുന്നു, യഥാർത്ഥ ലോകത്തിന് വിപരീതമായി നിങ്ങൾക്ക് # ഉപയോക്താക്കൾ ഇല്ലാത്ത # മറ്റ് ഉപയോക്താക്കൾ പൂർത്തിയാകുന്നതുവരെ ക്ഷമയോടെ കാത്തിരിക്കുക.
Трудно оставаться в чем-либо, не увидев сценарий теста Гатлинга. Просто «слепой выстрел»: ваш тест Гатлинга не совсем точно представляет реального пользователя, т.е.
DNS-кеширование. Gatling может поразить только один IP-адрес из-за IP-адресов, находящихся за кэшированием имен DNS на уровне JVM. Согласно FAQ Gatling :
По сути, кеш DNS Gatling / JVM необходимо настроить.Решение - добавить в командную строку
-Dsun.net.inetaddr.ttl = 0
.
AJAX-запросы. Gatling не выполняет клиентский JavaScript, поэтому, если ваше приложение построено на запросах XMLHTTP, они не будут запущены, когда Gatling попадет на страницу. Вам нужно будет обработать их вручную, если ваше приложение использует какую-либо форму AJAX
. Поэтому я бы рекомендовал обратиться к Как сделать JMeter более похожим на настоящий браузер и реализовать эквивалентную настройку Gatling, как если бы нагрузочный тест не отражает реальную нагрузку, нет смысла проводить такой тест.