Когда вы говорите «сбой», вы имеете в виду сегментации JVM и исчезают? Если это так, я бы проверил и убедился, что вы не исчерпываете доступную память машины. Java на Linux будет аварийно завершать работу, когда системная память становится настолько низкой, что JVM не может выделить до своей максимальной памяти. Например, вы установили максимальную память JVM на 500 МБ, из которых в данный момент она использует 250 МБ. Однако в ОС Linux доступно только 128 МБ. Это приводит к нестабильным результатам, и JVM будет зависать.
В Windows JVM лучше себя ведет в этом сценарии и выдает OutOfMemoryError, когда системе не хватает памяти.
- Проверьте, сколько системной памяти доступно во время ваших сбоев.
- Убедитесь, что другие процессы на вашем компьютере занимают много памяти. Отключите все, что может конкурировать с JVM.
- Запустите jconsole и подключите его к вашей JVM. Это расскажет вам, как память используется в вашем процессе JVM, и даст вам историю, чтобы оглянуться назад, когда произойдет сбой.
- Удалите любой собственный код, который вы, возможно, загружаете в JVM при выполнении этого типа тестирования.
Я считаю, что у Jetty есть некоторый нативный код для обработки больших объемов запросов. Убедитесь, что это не используется. Вы хотите изолировать сбои в Java, а НЕ в какую-то странную нативную библиотеку. Если вы возьмете родной материал и обнаружите, что он работает, у вас есть ответ на вопрос, что его вызывает. Если это продолжит падать, тогда это вполне может быть то, что я описываю.
Вы можете заставить JVM выделять всю память при запуске с помощью -Xms900m, который может гарантировать, что JVM не будет бороться с другими процессами за память. Как только он выделит полную сумму Xmx, он не потерпит крах. Не решение, но вы можете легко проверить это таким образом.