2012-01-05 1 views
0

Я использую Rackspace в качестве хостинг-провайдера, используя их хостинг с облачным сервером, с планом 256mb.Java-приложение действительно медленное

Я использую Geronimo 2.2 для запуска приложения java.

Сервер не запускается без проблем, загружает Geronimo довольно быстро, однако, когда я начал развертывать свое веб-приложение, он берется навсегда, и после его развертывания навигация на страницах занимает много времени.

Я отслеживаю активность сервера, процессор не так занят, однако 60% памяти израсходовано. Это может быть проблема?

Если да, то каковы мои варианты? Должен ли я рассмотреть возможность обновления этого облачного сервера на чем-то с большей оперативной памятью или изменение поставщика хоста, чтобы лучше удовлетворить мои потребности?


Редактировать: Я хотел бы отметить, что, даже если я не развернуть мое приложение, просто имея Джеронимо загружен, иногда я хотел бы получить время соединения, когда я пытаюсь закрыть Джеронимо.

Также база данных находится на том же сервере, что и приложение. (Однако я бы не сказал, его запрос интенсивная)


Update:
После того, что @matiu предложил, я попытался запустить бесплатную -m, и это вывод, что я получаю:

   total  used  free  shared buffers  cached 
Mem:   239  232   6   0   0   2 
-/+ buffers/cache:  229   9 
Swap:   509  403  106 

Это был совершенно другой результат, чем работа ps ux, вот как я получил свои предыдущие 60%.

И я сделал проверку iostat, и около 25% времени iowait, и устройство постоянно пишет и читает.


обновление:
модернизировал свой хостинг 512Мб, теперь это до скорости! Что-то, что я должен отметить, я забыл о постоянной памяти Java, которая также используется Geronimo. Так что получается, мне нужно больше оперативной памяти, и больше оперативной памяти удалось решить мою проблему. (Как и ожидалось) yay.

+0

Возможно, ваше приложение является проблемой, или сеть, или ...? Объем памяти на 150 МБ для сервера приложений довольно распространен (на самом деле он низкий), поэтому я думаю, что это не проблема. – home

+0

приложение работает нормально на локальном хосте (мой локальный компьютер), сеть также должна быть хорошей. Проблема не в моем приложении, потому что у меня даже проблема с навигацией консоли Geronimo на веб-клиенте. – HeavenAgain

+0

Geronimo и WAS потребляют в 3 раза больше ресурсов по сравнению с Glassfish. – Acn

ответ

0

Я предполагаю, что вы столкнулись с «заменой».

Как вы узнаете, Linux заменяет некоторую память на диск. Это отлично подходит для памяти, к которой не обращаются очень сильно.

Когда Java начинает есть кучи и кучки, Linux начинается:

  1. Перестановка блока памяти A на диск, чтобы освободить место для чтения в блоке B
  2. Чтение/запись блока B
  3. Перекачка блок B на диск, чтобы сделать место для другого блока.

Как диск в 1000 раз медленнее, чем оперативная память, так как использование памяти увеличивает вашу машину, все более и более приближается к остановке.

С 256-мегабайтными облачными серверами вы получаете 512 МБ пространства подкачки.


Проверка:

Вы можете проверить, если это дело с free -m .. this page показывает, как читать вывод:

Далее я бы проверить с «IOSTAT 5» см., что такое скорость ввода-вывода на диске в разделе подкачки. Я бы сказал, что скорость записи 300 или более означает, что вы почти мертвы в воде. Я бы сказал, что вы хотите, чтобы скорость записи в разделе подкачки была ниже 50 блоков в секунду, а скорость чтения ниже 500 блоков в секунду. Если возможно, оба значения должны быть равны нулю в большинстве случаев. Помните, что диск в 1000 раз медленнее, чем оперативная память.

Вы можете проверить, есть ли в нем яму, используя RAM, запустив top и нажав shift+m, чтобы заказать процессы по потреблению памяти.

Если вы хотите .. вы можете отключить раздел подкачки с помощью swapoff -a .. затем откройте веб-консоль и немного ударитесь по сайту .. вы скоро увидите сообщения об ошибках в консоли, например «OOM Killed process xxx «(Думаю, OOM для меня не хватает памяти). Если вы видите, что Linux пытается удовлетворить запросы памяти, убивая процессы. Как только это произойдет, лучше перезагрузиться.


Крепление:

Если это Java с помощью RAM .. this link может помочь.

Я думаю, что легкое исправление будет просто для обновления размера облачного сервера.

Вы можете найти другой Java RTE, который может быть лучше.

Если вы запустите его в a 32 bit chroot, то он может использовать меньше оперативной памяти.

+0

Эй, спасибо! Это отличный ответ. Не могли бы вы уточнить «скорость записи 300 или более» и как узнать, что такое раздел подкачки? При запуске iostat вывод показывает, что у меня есть 2 устройства, xvdc и xvda. xvdc выполняет большую часть работы, обычно с tps более 1000, kB_read/s более 3000, kB_write/s более 1000. Но в целом я думаю, что знаю, где моя проблема. Я попробую обновить свой сервер сегодня вечером и сообщить, если он сработает. – HeavenAgain

+0

Это был PermGen, который также занимает память, спасибо за вашу помощь! – HeavenAgain

+0

Я уверен, что xvdc будет вашим разделом подкачки. Вы можете увидеть, выполнив: sudo grep xvd/etc/fstab; 3000 пишет, что вторая слишком высокая. Это действительно должно убивать вашу производительность. Определенно слишком много использования памяти. – matiu

0

Вы должны рассмотреть возможность запуска виртуального выделенного Linux-сервера, от чего-то вроде linode. Вам нужно будет беспокоиться о том, как запустить службу Java и т. Д. Как брандмауэры и т. Д., Но как только вы это исправите, вы фактически являетесь владельцем собственного хостинга, позволяя вам делать что-то отдельное реальное поле Linux делать.

Что касается памяти, я бы не обновлялся до тех пор, пока у вас не будет доказательств того, что у вас недостаточно. 60% израсходовано на 100% меньше ...

Java обычно предполагает, что он может принимать все, что ему назначено. Смысл, если вы даете ему максимум 200 МБ, он уменьшает, что нормально принимать 200 МБ, даже если он использует намного меньше. Существует способ заставить Java использовать меньше памяти, используя инкрементный сборщик мусора -Xincgc. Фактически это заканчивается тем, что возвращает куски памяти в систему, когда она больше не нуждается в ней. На самом деле это немного секрет. Вы не увидите, чтобы кто-нибудь это заметил ...

0

Основываясь на моем опыте, память и загрузка процессора на VPS вполне связаны. Значение, когда сервер приложений будет занимать всю доступную память, загрузка процессора начинается с неба, что делает приложение недоступным.

Это только побочный эффект, хотя - вам действительно нужно исследовать, где возникли ваши проблемы!

Если потребление памяти очень высока, то вы можете иметь несколько причин:

  1. Это нормально - может быть, вы достигли точки, где все процессы (серверные приложения, приложения внутри него, фоновые процессы, демоны, операционная система и т. д.) вместе требуют огромного объема памяти. Это наименее вероятно сценарий.
  2. Утечка памяти - может произойти из-за ошибки в каркасе или некоторой библиотеки (не вероятно) или вашего собственного кода (возможно). Это можно наблюдать и решать.
  3. Огромное количество запросов - каждый запрос будет обрабатывать как процессор, так и память. Вы можете посмотреть на соотношение между запросами в секунду и потреблением памяти, то есть его можно контролировать и разрешать.

Если вы заинтересованы в использовании CPU:

  1. Опять же, монитор запросы к вашему приложению. Для постоянного подсчета запросов ничего необычного не должно произойти.
  2. Один компонента истощает большинство ресурсов (возможно, ваша база данных установлена ​​на тот же сервер, и он использует всю мощь процессора из-за неэффективные запросы? Slow журнала поможет.)

Как вы можете видеть, это не тривиальное но у вас есть поддержка инструментов, которая поможет вам. Я лично использую java melody и probe.