2013-10-30

Пятиминутка баз (хранилищ) данных

1. Percona засветилась за пределами MySQL тусовки
http://www.theregister.co.uk/2013/10/07/percona_server_update/
http://www.pcworld.com/article/2054060/percona-challenges-oracle-with-alternate-mysql-release.html
Жаль они не делают сборок MySQL под Windows!

Почему Percona, а не MariaDB:
- несмотря на заявленные оптимизации, у меня локально (Windows 8, 8 CPU, 8GB RAM, slow HDD) показала результаты хуже, чем оригинальный MySQL 
- субъективно MariaDB более серьезный уход от оригинального MySQL
- у знакомых (linux админ хороший, но MySQL знает слабо) не завелась после простой (drop-in) замены, а версия от Percona сразу заработала

Но если Google перейдет на MariaDB - это может представить дело в новом свете.


2. Шикарный онлайн ресурс! Поддерживает карточки-описания различных БД и позволяет разные БД между собой (формальные характеристики вроде поддержки SQL, ACID?, Database model, Developer, подборка свежих ссылок, к сожалению производительность никак не описана) http://db-engines.com/en/systems (пример сравнения http://db-engines.com/en/system/Microsoft+SQL+Server%3BMongoDB%3BMySQL%3BPercona+Server%3BPostgreSQL )

И ещё они сделали рейтинг разных БД (методика описана, напоминает http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html для языков программирования)
http://db-engines.com/en/ranking

2013-10-16

~Online WireShark

Если нужно посмотреть снятый дамп сетевой активности, но нет времени/желания/возможности ставить wireshark, то можно воспользоваться сервисом cloudshark.org

2013-05-20

JMX через ssh-туннель: подключение JVisualVM к удаленному серверу

Примечания
* Иногда может хватить jmx shell console (один jar-ник, работает на сервере в консоли): http://wiki.cyclopsgroup.org/jmxterm.

* посмотреть слушают ли порты и кто:
linux: netstat -l -p -n
windows: netstat -a -b -n

Настраиваем (X=6 или 7)!
  1. скачать catalina-jmx-remote.jar из tomcat.apache.org/download-X0.cgi - Extras - JMX Remote jar в tomcat/lib
  2. в опциях запуска tomcat (tomcat/bin/catalina.sh или /etc/default/tomcatX) в ключ CATALINA_OPTS/JAVA_OPTS добавляем " -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1 ". Для примера в итоге он может выглядеть так: JAVA_OPTS="-Djava.awt.headless=true -Xmx3400m -XX:+HeapDumpOnOutOfMemoryError -Duser.language=ru -Duser.region=RU -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:+UseCompressedOops -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=127.0.0.1"
  3. в conf/server.xml (там где правим <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443"/>) добавляем <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9098" rmiServerPortPlatform="9099"/>
  4. перезапускаем tomcat, проверяем чистоту логов, проверяем занятость портов
  5. в ssh клиенте для надежности настраиваем туннели на обоих портах ;-), проверяем что порты слушаются локально
  6. подключаемся JVisualVM/JConsole используя JMX url вида: service:jmx:rmi://127.0.0.1:9099/jndi/rmi://127.0.0.1:9098/jmxrmi

Источники
- JMX through a ssh tunnel - http://blog.markfeeney.com/2010/10/jmx-through-ssh-tunnel.html
- Connecting remote tomcat JMX instance using jConsole - http://stackoverflow.com/questions/1263991/connecting-remote-tomcat-jmx-instance-using-jconsole
- http://gabenell.blogspot.ru/2010/04/connecting-to-jmx-on-tomcat-6-through.html

2013-03-12

Все опции java

# java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version [другие опции и аргументы]

http://q-redux.blogspot.ru/2011/01/inspecting-hotspot-jvm-options.html
http://javarevisited.blogspot.ru/2011/11/hotspot-jvm-options-java-examples.html

Версия попроще
# java -XX:+PrintCommandLineFlags -version [другие опции и аргументы]

2012-12-23

MSSQL и ошибки

Если вы работаете с MSSQL вообще или с MSSQL через jdbc, то от этих ссылок вы получите удовольствие!

Подробнейшее описание как обрабатывать ошибки в MSSQL:
http://www.sommarskog.se/error-handling-I.html
http://www.sommarskog.se/error-handling-II.html
кратенькая выжимка http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx

Ссылки которые я искал два дня. Вся порочная правда о MSSQL и jdbc (они об одном и том же)!
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/04/why-doesn-t-executeupdate-give-me-the-exception-i-expected.aspx
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/01/use-execute-and-getmoreresults-methods-for-those-pesky-complex-sql-queries.aspx


PS: если вы используете Java 6, MSSQL 2000 и jtds, то я сделал работающую с MSSQL2000 Java 6 версию jtds 1.3 http://sourceforge.net/p/jtds/bugs/683/

Полезные ссылки и утилиты

- текстовый редактор Sublime Text 2 (хотя я, из-за его самобытной раскладки, пользуюсь http://www.jetbrains.com/idea и http://notepad-plus-plus.org)

- редактор различных диаграмм  diagram.ly он же draw.io

- если нужна offline утилита: yEd описание и сайт производителя

- генератор UML схем (диаграмм) yuml.me

- доступ к удаленному ПК 2.0  LogMeIn

- скрипт анализирующий ваш MySQL и дающий советы по его лучшей настройке: mysqltuner.com

- утилита innotop для MySQL
  1. Download latest TermReadKey? from CPAN: http://search.cpan.org/~stsi/TermReadKey/ReadKey.pm
  2. tar -zxvf TermReadKey-2.30.02.tar.gz
  3. perl Makefile.PL
  4. make test
  5. make install
Innotop manual http://innotop.googlecode.com/svn/html/index.html, в частности:
innotop -u [username] -p [password] -h [hostname]

2011-12-04

Памятка по установке JRebel

Прежде всего хочу сказать, что настраивать-то особо нечего ;-)
Можно посмотреть презентацию "для вдохновения" zeroturnaround.com/jrebel/presentations.

Я использую IntelliJ IDEA, для других IDE инструкция может слегка отличаться, см zeroturnaround.com/resources .

1. Идем в IDE settings | plugins и находим среди доступных JRebel Plugin, Download and Install, Apply (restart).

С сайта zeroturnaround.com/jrebel/current ничего качать не нужно, все включено в плагин.


2. В IDE settings появится пункт JRebel, там нажимаем Launch JRebel Configuration Wiazard...
Первый пункт активация - проще и дешевле начать с evolution.
Второй пункт license пропускаем -  evolution сам сгенерирует и активизирует лицензию на 30 дней.


3. пункт Choose settings выбираем какая IDE используется, тогда следующие пункты будут показывать инструкции по мелкой оптимальной подстройке этой IDE.

Следует выставить три 'галочки' в IDE по инструкциям в последующих пунктах.

Закончили с установкой и конфигурированием.


4. В Project view проекта в pop-up menu выбираем Generate rebel.xml

Далее как сделал я и как удобно мне, возможно вам тоже понравится :-)



5. Сохраняем rebel.xml в [webroot]/WEB-INF/classess
Это единственный, довольно простой конфигурационный файл JRebel.

Основные настройки описаны в zeroturnaround.com/jrebel/how-to-configure-rebel-xml
На всякий случай ссылка на полное описание (скорее всего не понадобится): zeroturnaround.com/jrebel/configuration

Настройки по умолчанию мне не подошли т.к.
a. я использую Apache Click, который при старте достает некоторые ресурсы в [webroot], а так как по умолчанию используется [webroot] в исходниках, то система контроля версий обнаруживает кучу новых файлов.

b. в проекте много модулей, которые компилируются в jar-ы и кладутся в [webroot]/WEB-INF/lib

Поэтому пришлось прописать папку target/название_web_app - как [webroot],
и несколько target/production/название_модуля - как путь для поиска классов, где:
* target стандартное maven-название папки куда все компилируется,
* production - папка принудительно создаваемая IDEA,
* название_web_app - путь который вы прописали в Web Application exploded artifact, e.g. voip, smsrouter, etc,
* название_модуля - IDEA создает для каждого модуля свои подпапки в production.

Итоговый файл:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">

 <classpath>
  <dir name="C:/j/voip.dev/bh/target/production/core"/>
  <dir name="C:/j/voip.dev/bh/target/production/demo"/>
  <dir name="C:/j/voip.dev/bh/target/production/mca"/>
  <dir name="C:/j/voip.dev/bh/target/production/tts"/>
 </classpath>

 <web>
  <link target="/"><!-- если эту папку zip-ануть, получится .war -->
   <dir name="C:/j/voip.dev/bh/target/voip" />
  </link>
 </web>
 
</application>

Готово!

Далее просто запускаем Tomcat не обычной зеленой стрелочкой, а стрелочкой с "jr".
Вносим изменения в код, компилируем (IDEA перед этим сохраняет) Ctrl+Shift-F9 или Ctrl-F9, F5 в браузере и видим обновление.

PS: если хочется ускорить первый старт Tomcat, то мой предыдущий совет "скопировать папку VAADIN из vaadin.jar в [webroot]" по прежнему применим.


Кроме того, возможно вам захочется избавиться от сериализации HTTP сессии между рестартами Tomcat (пользы от этой сериализации в случае Vaadin не очень много), для этого в [webroot]/META-INF нужно поместить файл context.xml вида:
<?xml version='1.0' encoding='utf-8'?>
<Context antiJARLocking="true" >
  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
 
  <!-- disable session persistence across Tomcat restarts -->
  <Manager pathname="" />
</Context>

Аттрибут antiJARLocking="true" опционален (можно убрать). Он нужен если web приложение не освобождает какие-то классы и не выгружается Tomcat (свой код лучше от такого чистить, но бывают такие библиотеки третьих сторон).

2011-12-02

Робот полотер

Читаю Робот-полотер Mint - обзор @ exler.ru/expromt/10-11-2011.htm и нахожусь в задумчивости.
Дома у меня нет ковров, везде ламинат т.е. пылесос не нужен, а вот полотер...