Я предполагаю, что вы проверили настройки JVM, с которыми вы запускаете Tomcat. Возможно, у вас слишком мало памяти.
Я бы порекомендовал вам загрузить Visual VM 1.3.3, установить все плагины, запустить приложение Tomcat и подключить Visual VM к JVM. Он покажет вам, что происходит в памяти, процессоре, созданных объектах, потоках и т. Д.
Вы не показали код, и у вас нет данных. Вы никогда не решите эту проблему таким образом. Никто здесь не может вам сильно помочь. Ваш код создает слишком много объектов. Вам нужно выяснить, почему и остановить это.
У нас есть бизнес-причина для создания единого потока для одного устройства.
и обработать входящий запрос.
Возможно, у вас есть деловая причина, но ваши технические причины могут быть неверными. Каждый входящий HTTP-запрос имеет один поток. Разве это не то, что вы хотите? Когда GPS отправляет запрос, у вас есть одна нить для его обработки, верно? Почему вы должны создавать много потоков с каждым запросом? Что эти темы делают?
Другим подходом может быть отказ от создания потоков. Когда приходит запрос от устройства, найдите какой-нибудь уникальный тег, такой как идентификатор устройства, и добавьте это сообщение в историю сеансов для этого устройства. До сих пор я не слышал никаких оправданий для создания тем.
Я не знаю, потрудились ли вы написать свой собственный сервер, но я бы порекомендовал вам изучить Netty. Это полностью Java-сервер, основанный на неблокирующем вводе-выводе и предназначенный для обработки большого трафика. Они знают, как обращаться с потоками. Может быть, вы можете просто использовать его и добавить к нему свою логику обработки.