Решение проблем

Материал из Course Orchestra
Перейти к: навигация, поиск
Showcase

Создание решений на КУРС:Showcase

Проблемы с памятью

PermGen space

Периодически при развертывании наших приложений на Tomcat возникают проблемы с памятью, которые как правило выражаются в появлении ошибки "PermGen space".

Для того, чтобы уменьшить вероятность появления этой ошибки, рекомендуется увеличить максимальный размер "PermGen space". Как это сделать? Все зависит от способа запуска Tomcat.


1) Tomcat запускается из командной строки с помощью bat-файла. В этом случае нужно увеличить параметр Tomcat CATALINA_OPTS а) в файле catalina.bat. Т.об. он будет действовать только для Tomcat, в который Вы вносите изменения. Необходимо найти метку :doStart в этом этом файле. После этой строчки необходимо написать

set CATALINA_OPTS="-XX:MaxPermSize=512m"

либо любое другое значение выделяемой памяти. б) через механизм переменных среды Windows. Т.об. он будет действовать для всех Tomcat, запускаемых на данной машине из командной строки.

  • Имя переменной: CATALINA_OPTS
  • Ее значение: -XX:MaxPermSize=512m


Envpathsetup.jpg


2) Tomcat запускается как сервис. В этом случае нужно запустить файл Tomcat7w, находящийся в папке bin инсталляции Tomcat. В появившимся окне перейти на вкладку Java и там в поле Java Options с новой строчки добавить запись: -XX:MaxPermSize=512m Важно, чтобы строка не содержала лишних пробелов в начале или в конце!

Tomcatservice.jpg

3) Tomcat запускается из Eclipse. В этом случае нужно открыть представление (View) Servers, выбрать нужный Tomcat, щелкнуть по нему правой кнопкой мыши, выбрать в появившемся меню пункт Open. В открывшемся окне нужно найти ссылку Open launch Configuration. В очередном открывшемся окне нужно перейти на вкладку Arguments, где в поле VM arguments через пробел добавить строчку -XX:MaxPermSize=512m

Tomcateclipse.jpg

Java heap space

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

Способ ее решения аналогичный проблеме PermGen space: нужно увеличить Heap Size для JVM.

  1. В случае запуска из командной строки нужно добавить в CATALINA_OPTS ключ -XmxNm, где N - размер кучи в магабайтах.
  2. В случае запуска из Eclipse - добавить тот же ключ в список аргументов VM сервера в Eclipse (см. на картинку выше).
  3. В случае запуска сервиса Tomcat - ввести число мегабайт в специальное поле - Maximum Memory Pool (см. на картинку выше).

Для начала можно установить значение 1200 (мегабайт). Если не поможет - увеличивать и проверять - не исчезла ли ошибка. При увеличении следует иметь в виду размер свободной оперативной памяти на компьютере.

Проблемы с IE

IE 8

Текущая версия Showcase (на август 2011) создана с использованием GWT 2.3.0, который поддерживает работу в IE версий 6-9. Режим работы GWT кода Showcase определяется режимом документа IE (не режимом браузера).

Проверить текущий режим работы можно в консоли "Средства разработчика" (вызывается по клавише F12). Рекомендуется выставлять для режима браузера и режима документа значение IE8.

Mode ie.jpg

IE 9

В данный момент полноценной поддержки IE 9 в Showcase нет. Это связано с тем, что используемая нами компонента для формирования XForms не поддерживает IE9, что требует запуска Showcase в режиме в IE9 в режиме документа IE8. В таком режиме возникают проблемы в GWT и ExtJS коде, а также в работе FLash компонент. Вот несколько примеров возникающих проблем:

  1. пропадают графики Showcase
  2. пропадают закэшированные элементы типа карта
  3. некорректно отображаются карты Showcase: нет возможности их двигать
  4. не отображается содержимое Flash компоненты
  5. выдаются ошибки при открытии компонент ExtJS

Отладка с помощью JMX

О технологии JMX можно почитать [1] или в википедии на английском.

Для начала настроим порт для мониторинга Tomcat через JMX. Для portable Tomcat (он же папочный Tomcat) файл catalina.bat в каталоге bin рекомендуется изменить следующим образом: найти в нем блоки :doStart и :doRun и сразу после них добавить строку

set "CATALINA_OPTS=-Dcom.sun.management.jmxremote.port=XXXX -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

где XXXX - отладочный порт, должен быть уникален для каждого экземпляра Tomcat. //Именно поэтому не рекомендуется установка данных параметров с помощью переменной среды CATALINA_OPTS.//

Далее запускаем jvisualvm в каталоге bin JDK, жмём кнопку "Add JMX Connection" в меню File и указываем localhost:XXXX (XXXX - порт, указаный в catalina.bat). После чего в левом дереве должен появится новый элемент - localhost:XXXX. Щелкаем на него дважды и система начинает мониторить состояние виртуальной машины и строить наглядные графики.

Jvisualvm.jpg


В случае запуска Tomcat как сервиса указанные строчки нужно добавить в список параметров виртуальный машины таким же образом, как и в случае настройки PermGen Space (см. выше). !!!! Не забывая при этом о правиле: один параметр - одна строчка, нет лишним пробелам! Указанные строчки должны быть последними.

В случае запуска из Eclipse настройка также аналогична установке PermGen Space.

Компиляция GWT ограниченного количества пермутаций для Sencha GXT

Необходимо добавить в файл App.gwt.xml параметр

<set-property name="gxt.user.agent" value="chrome"/>,

чтобы компилировалась только одна пермутация для chrome

Профилирование серверной части

Необходимо в файле logback.xml раскомментировать следующий код

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>E:\\Downloads\\app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <FileNamePattern>E:\\Downloads\\app.%d{yyyy.MM.dd}.log</FileNamePattern> 
         <maxHistory>30</maxHistory>
     </rollingPolicy> 
    <encoder> 
         <Pattern>${profileLogPattern}</Pattern>
     </encoder> 
</appender> 


<logger name="profileLog" level="INFO" additivity="false">
    <appender-ref ref="FILE" />
</logger>

и настроить файл для вывода лога

 <file>E:\\Downloads\\app.log</file>

Информация в лог выводится в следующем формате

[FullId элемента] [Дата начала выполнения серверной функции] [Дата окончания выполнения серверной функции] Продолжительность_выполнения_серверной_функции(мс) Тип_элемента Подтип_элемента(если есть)

например

[dpe_JSTreeGrid__6] [30.05.2014 0:06:02] [30.05.2014 0:06:03] 160 WEBTEXT 
[dpe_JSTreeGrid__511] [30.05.2014 0:06:06] [30.05.2014 0:06:06] 278 GRID JS_TREE_GRID

Полное отключение профилирование серверной части

Есть 2 файла logback.xml. Один лежит в варнике в WEB-INF/classes (либо в папке src, если в эклипсе). Второй в корне папки пользовательских данных в виде logback.template.xml. Если в папке пользовательских данных сделать из template-файла обычный logback.xml, то учитываться при логгировании будет именно он.

Чтобы отключить логгирование нужно в этих файлах закомментировать следующие подтеги (по сути все подтеги) тега <root level="trace">, а именно:

<appender-ref ref="ShowcaseWebConsoleAppender" />
  <appender-ref ref="STDOUT" />
  <appender-ref ref="FILE" />

Поддержка броузера InAppBrowser

Необходимо добавить в файл App.gwt.xml параметр

 <set-property name="user.agent" value="safari,gecko1_8,ie8,ie9,opera" />

А вместо строчек

 <extend-property name="locale" values="ru"/>
 <extend-property name="locale" values="en"/>

оставить только

 <extend-property name="locale" values="en"/>

В результате получается универсальное решение, поддерживающее работу во всех броузерах, включая InAppBrowser

Проблемы с кодировкой jython-файлов

После установки Jython 2.7 и создании соответствующиего интерпретатора в Eclipse, при попытке запуска скрипта (Run/Debug) вы с вероятностью 99% можете получить ошибку

console: Failed to install : java.nio.charset.UnsupportedCharsetException: cp0.

Данная проблема связана с пресловутой кодировкой. При запуске скрипта Jython имеет кодировку по умолчанию отличную от UTF-8. Чтобы данная ошибка исчезла, интерпретатору необходимо сообщить правильную кодировку. В интернете есть несколько способов это сделать, но, к сожалению, работают далеко не все из предложенных (работает и при этом удобно пока только 1 способ).

Для установки правильной кодировки необходимо открыть файл <jython 2.7 dir>\registry (например C:\Program Files\Jython 2.7\registry), найти в нем строчку со словами python.console.encoding (скорее всего она будет закомментирована) и либо раскомментировать её, заменив имя кодировки, либо вставить новую строчку вида python.console.encoding = UTF-8.

Если вы уже создали интерпертатор Jython 2.7 в Eclipse ,то вам необходимо снова пересоздать данный интерпретатор, чтобы настройки Jython применились.


Как ускорить загрузку (старт) Tomcat

Официальные рекомендации даны на официальной wiki странице Tomcat:

https://wiki.apache.org/tomcat/HowTo/FasterStartUp


Логгирование количества активных сессий

Реализовано логгирование количества активных сессий. Вывод в лог производится со следующими параметрами (после указания имени класса и вызывающего метода будет указана следующая информация):

 Showcase.Sessions.Count: DateTime: текущие_дата_и_время  Number: количество_активных_сессий

Пример для вэб-консоли (level=INFO):

 Showcase.Sessions.Count: DateTime: Thu Jan 26 16:07:26 MSK 2017 Number: 1 

Проблемы с кодировкой сообщений PostgreSQL

Сообщения, которые выдает PostgreSQL (в частности, сообщения об ошибках), в некоторых случаях могут приходить с неверной кодировкой. Это является багом PostgreSQL, связанным с тем, что для процесса postmaster не устанавливается правильный коллэйшен.

Для решения этой проблемы нужно переключить выдачу сообщений на английский язык. В файле настроек postgresql.conf необходимо прописать:

 lc_messages = 'en_US.UTF-8'

Linux. Подключение 80 порта

Для подключения 80 порта можно использовать переадресацию с порта прописанного в файле настройки Томката server.xml. В приведенном примере это порт 8080, указывающийся по умолчанию. Решение будет доступно и по 80, и 8080 порту.

 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080