Мы - счастливая группа разработчиков из Венесуэлы, которые разработали приложение tomcat5.5 + java + spring + hibernate + mysql + jstl + (flex). Теперь мы установили их клиентам и порадовали их, каждый в своем домене. Мы используем Linode в качестве хостинг-провайдера и программное обеспечение cpanel WHM, чтобы помочь нам быстро создавать учетные записи, поддерживать почтовый сервер и прочее. И предоставить пользователям доступ к их почтовым аккаунтам.
Итак, мы все ладили, пока мой кот не переставал время от времени работать, выдавал ошибку памяти, перезапускал кота и снова все было в порядке. Получил больше клиентов, купил больше оборудования, пока оборудование не стало иметь никакого значения, узнал о размере кучи, теперь я даю больший размер кучи для tomcat, теперь весь сервер время от времени падает. Подключил Jconsole, я могу видеть пики в памяти каждые 10 минут, частота в несколько раз меньше. Пик увеличивается с каждой итерацией, пока не сломается. Нужны советы о том, как масштабировать такого рода приложения, поэтому я прошу больших ребят (вас, ребята) дать какие-либо советы, направления, что угодно, для масштабирования моей архитектуры. Спасибо!
Если падает весь сервер, возможно, вы выделяете слишком много памяти для JVM. Вы должны оставить место для операционной системы, сетевых подключений и буферов. На стороне JVM, если ваше использование памяти постоянно растет, у вас есть какая-то утечка, или сеансы проводятся слишком много времени, или просто выделенной памяти недостаточно для этого номера пользователя. Возьмите некоторые показатели использования памяти за сеанс.
Поведение jvm заключается в выделении памяти до тех пор, пока она свободна, когда она больше не может найти свободную память, а затем собирает мусор (частичный gc или полный gc в зависимости от давления памяти), вы должны проверить нижнюю точку после сборки мусора, чтобы увидеть, поднимаясь выше с каждым gc. Также проверьте время gc, если ваше приложение проводит слишком много времени в gc и вы не можете выделить ему больше памяти, пора масштабировать и балансировать нагрузку.