Archive for Kwiecień, 2010

VirtualBox: zarządzanie uruchamianiem maszyn wirtualnych przy użyciu linii poleceń (VBoxManage)

VirtualBox jest aplikacją, która pozwala na używanie wirtualnych systemów operacyjnych. Standardowo jest dostarczana z przyjaznym interfejsem użytkownika, który pozwala na zarządzanie tymi maszynami. Przy jego użyciu można robić takie rzeczy jak:

  • tworzenie i usuwanie maszyn wirtualnych
  • uruchamianie i zatrzymywanie maszyn wirtualnych
  • modyfikację konfiguracji poszczególnych maszyn wirtualnych
  • inne rzeczy związane z obsługą wirtualnych maszyn

Jest także dostępna możliwość zarządzanie wirtualnymi komputerami przy użyciu linii poleceń za pomocą komendy VBoxManage. Pozwala ono na takie same akcje jak narzędzie graficzne oraz kilka rzeczy, których nie da się za jego pomocą zrobić.

  • lista zarejestrowanych maszyn wirtualnych:
    $ VBoxManage list vms
    Sun VirtualBox Command Line Management Interface Version 3.1.6
    (C) 2005-2010 Sun Microsystems, Inc.
    All rights reserved.

    "ChromeOs" {7ca42bf2-4b33-4b0b-a0f8-669cb3d2703a}
  • uruchomienie wybranej maszyny wirtualnej:
    $ VBoxManage startvm ChromeOs
    Sun VirtualBox Command Line Management Interface Version 3.1.6
    (C) 2005-2010 Sun Microsystems, Inc.
    All rights reserved.

    Waiting for the remote session to open...
    Remote session has been successfully opened.
  • wstrzymanie działania maszyny wirtualnej:
    $ VBoxManage controlvm ChromeOs pause
  • ponowne wznowienie pracy:
    $ VBoxManage controlvm ChromeOs resume
  • wyłączenie maszyny:
    $ VBoxManage controlvm ChromeOs acpipowerbutton
    $ VBoxManage controlvm ChromeOs poweroff
  • zapisanie stanu maszyny i jej wyłączenie
    $ VBoxManage controlvm ChromeOs savestate

To jest podstawowy zestaw komend, który pozwala na zarządzanie procesem uruchamiania i zatrzymywania maszyn wirtualnych. Polecenie to pozwala na dużo więcej, warto zapoznać się zarówno z dokumentacją dostarczaną z VirtualBoxem jak i pomocą wyświetlaną przez aplikację.

Źródła

Tags: , , , ,

Automatyczne dopasowanie ilości wyświetlanych linii w poleceniach head i tail

Dwa polecenie head oraz tail pozwalają na wyświetlenie odpowiednio 10 pierwszych lub ostatnich linii podanego pliku tekstowego. Przy użyciu przełącznika -n można określić inną ilość zwracanych linii. Z reguły pracuję na terminalach, gdzie ilość która się mieści na ekranie jest sporo większa niż 10, w związku z czym wolałbym, aby polecenia te odpowiednio do tego rozmiaru się dostosowywały.

Najprościej można zrobić to przy użyciu odpowiedniego aliasu do polecenia i umieszczeniu jego definicji w pliku ~/.bashrc:

alias head='head -n $(($LINES-2))'
alias tail='tail -n $(($LINES-2))'

Uwaga

Ważne jest umieszczenie definicji poleceń w pojedynczych cudzysłowach, dzięki temu zmienna $LINES będzie interpretowana podczas każdego wykonania polecenia, a nie tylko podczas jego definicji (czyli będzie po zmianie rozmiaru terminala polecenie odpowiednio się dostosuje).

W powyżej definicji została wykorzystana zmienna $LINES, która zawiera aktualną ilość widocznych linii w terminalu. Po utworzeniu tych aliasów przy każdym wywołaniu polecenia head lub tail zostanie odpowiednio ustawiona wartość wypisywanych linii na ekranie. Wartość ta jest pomniejszana o 2, aby starczyło miejsca na znak zachęty i w zależności od jego konfiguracji można ją zwiększyć.

Źródła

Tags: , , , ,

Zarządzalne ziarna (MBeans) w JVM i serwerze aplikacji JBoss

Serwer aplikacji JBoss udostępnia poprzez szereg ziaren możliwość zarówno sprawdzenia stanu w jakich one się znajdują, jak i wykonywanie różnych operacji na nich. Dostać się do nich można poprzez konsolę JMX.

Poniżej znajduje się lista tych bardziej interesujących (ale w żadnym wypadku nie jest to lista ani pełna, ani wyczerpująca):

  • java.lang:type=OperatingSystem
    Pozwala na wyświetlenie informacji o systemie operacyjnym na którym jest uruchomiony serwer aplikacji. Można tu odczytać takie informacje o ilości otwartych plików, ilości i zużyciu pamięci, architekturze serwera, obciążeniu serwera, ilości procesorów.
  • java.lang:type=ClassLoading
    Informacje o załadowanych klasach w JVM: ilość załadowanych klas, ilość usuniętych klas, całkowita ilość załadowanych klas. Można także włączyć opcję Verbose, która spowoduje, że w momencie ładowania jakiejś klasy zostanie wypisany na standardowe wyjście komunikat o tym. Może to być przydatne podczas debugowania aplikacja, w przypadku problemów z ładowaniem klas.
  • java.lang:type=Compilation
    Informacje o kompilatorze oraz czasie jaki został poświęcony na kompilację kodu do bytecodu.
  • java.lang:type=GarbageCollector,name=nazwa kolektora
    Informacje o odśmiecaczu, takie jak ile razy był uruchomiony, ile czasu potrzebował do działania, nazwy przestrzeni na zmienne używane przez grabage collector.
  • java.lang:type=Memory
    Informacje o aktualnym stanie pamięci w JVM. Istnieje możliwość włączenia trybu Verbose, dzieki któremu można się dowiedzieć o pamięci zwalnianej przez odśmiecacz. Można także wymusić wywołanie garbage collectora poprzez metodę gc(). Funkcjonalnie odpowiada to wywołaniu metody System.gc().
  • java.lang:type=Runtime
    Szereg informacji o maszynie wirtualnej Javy, takie jak: ścieżka klas, właściwości JVM, argumenty wejściowe dla JVM, nazwa producenta JVM, wersja JVM, lista bibliotek dla JVM, czas działania.
  • java.lang:type=Threading
    Interfejs ten pozwala na zapoznanie i zarządzanie wątkami uruchomionymi w ramach maszyny wirtualnej Javy. Przy jego pomocy można uzyskać zarówno informacje o ilości uruchomionych wątków, ich numerach ID oraz informacje o poszczególnych wątkach.
    Dostępna jest także metoda, pozwalające na sprawdzenie czy nie ma wątków zablokowanych (findDeadlockedThreads).
  • jboss:type=Service,name=SystemProperties
    Pozwala na wyświetlenie informacji systemowych. Posiada metodę showAll, która wyświetla wszystkie właściwości w kolejności alfabetycznej. Można się dowiedzieć co kryje się pod systemowymi właściwościami używanymi przez serwer aplikacji, takimi jak: jboss.server.data.dir czy jboss.server.name.
  • jboss:service=JNDIView
    Pozwala na wyświetlenie obiektów zarejestrowanych w JNDI. Posiada dwie metody list oraz listXML, które pozwalają wyświetlić informacje o poszczególnych obiektach i ich nazwach zarejestrowanych w JNDI. Przydatne w przypadku problemów z obiektami pozyskiwanymi z katalogu, takimi jak brak nie rozpoznana nazwa, problem z rzutowaniem klas.
  • jboss.system:type=Log4jService,service=Logging
    Pozwala na konfigurację logowania serwera JBoss. Logowanie odbywa się przy użyciu biblioteki Log4j a to ziarno pozwala na bezpośrednią modyfikację jej konfiguracji: zmianę poziomu logowania, zmianę sposobu logowania poszczególnych komponentów, konfigurację czy przechwytywać komunikaty wypisywane na standardowe wyjście, plik konfiguracyjny i okres jego sprawdzania.
  • jboss.system:service=ThreadPool
    Pozwala na sprawdzanie oraz zarządzanie rozmiarem puli wątków. Można sprawdzić ilość połączeń oczekujących na obsługę (parametr QueueSize) i w razie potrzeby zwiększyć ilość działających wątków (parametr MaximumPoolSize).
  • jboss.system:type=Server
    Podstawowe informacje o serwerze aplikacji JBoss: wersja, data zbudowania, data uruchomienia. Pozwala także na wyłączenie serwera, uruchomienie odśmiecacza.
  • jboss.system:type=ServerConfig
    Lokalizacja szeregu katalogów używanych przez JBossa, takich jak katalog domowy, tymczasowy i inne. Pozwala także na konfigurację sposobu opuszczania JVM w momencie kończenia pracy przez serwer aplikacji (czy JVM także ma kończyć swoją pracę w momencie zamykania JBossa).
  • jboss.system:type=ServerInfo
    Wyświetlenie informacji o JVM oraz systemie operacyjnym. Posiada oprócz tego metody pozwalające na wyświetlenie informacji o zużyciu poszczególnych obszarów pamięci GC (listMemoryPools), wyświetlenie informacji o wybranym pakiecie (displayPackageInfo), zużyciu procesora przez poszczególne wątki (listThreadCpuUtilization), zrzut informacji o wątkach (listThreadDump).

Źródła

Tags: , , , ,

Zmiana wewnętrznej bazy danych JBossa (HSQLDB) na MySql

W domyślnej instalacji JBoss używa wewnętrznie bazy danych HSQLDB. Jest to baza danych napisana w 100% w Javie. Całkiem dobrze sprawdza się w prostych zastosowaniach jako baza danych wbudowana, ale bywają z nią problemy jeżeli nasze wymagania rosną.

W przypadku serwera JBoss baza ta posiada kilka zalet:

  • bardzo dobrze sprawdza się w środowisku deweloperskim
  • jest skonfigurowana do działania od razu po instalacji serwera, nie wymaga żadnej konfiguracji
  • prosta w użyciu

Ale jest także szereg wad, które uniemożliwiają jej używanie w systemie produkcyjnym, charakteryzującym się potrzebą dużej wydajności i niezawodności:

  • brak izolacji transakcji
  • problemy z wyciskania wątków czy socketów
  • występowanie błędów w przypadku błędnego zamknięcia bazy danych
  • problemy ze stabilnością w przepadku dużego obciążenia serwerów

Zaleca się, aby w systemach produkcyjnych zmienić bazę danych HSQLDB na inną, bardziej stabilną i o większych możliwościach. Zmiana konfiguracji po stronie serwera JBoss nie jest bardzo skomplikowana, należy wykonać kilka kroków. Poniższy opis odnosi się do bazy danych MySql, ale nie powinno sprawić wielkich trudności przerobienie go na dowolną inna bazę danych.

Krok 1: Instalacja serowników bazy danych

Pierwszym krokiem powinna być instalacja odpowiednich sterowników bazy danych. Należy skopiować je do katalogu $JBOSS_HOME/common/lib. W tym katalogu znajdują się biblioteki dostępne we wszystkich profilach, więc będzie można w każdym z nich ich używać.

W przypadku bazy danych MySql odpowiednie sterowniki można pobrać ze strony producenta: Download Connector/J. Pobrane archiwum należy rozkompresować i skopiować znajdujący się tam plik mysql-connector-java-*.jar do katalogu $JBOSS_HOME/common/lib lub też katalogu [lib] danego profilu.

Krok 2: Konfiguracja bazy danych

Kolejnym krokiem jest utworzenie bazy danych oraz odpowiedniego użytkownika. Należy połączyć się z bazą danych i wydać odpowiednie polecenia:

$ mysql -u root

Teraz wystarczy utworzyć bazę danych i odpowiedniego użytkownika:

1
2
CREATE DATABASE jboss_server;
GRANT ALL PRIVILEGES ON jboss_server.* TO jboss_user@'localhost' IDENTIFIED BY 'haslo';

Oczywiście nazwa bazy danych, użytkownika oraz hasło należy sobie odpowiednio dobrać. Jeżeli baza danych nie znajduje się na tym samym serwerze co serwer aplikacji, to także należy odpowiednio zmodyfikować ten wpis (czyli zmienić localhost na odpowiednią nazwę hosta).

Krok 3: Konfiguracja domyślnego źródła danych

Domyślna baza danych nazywa się DefaultDS i jej konfiguracja (dla wbudowanej bazy danych) znajduje się w pliku deploy/hsqldb-ds.xml dla danej konfiguracji serwera JBoss. Aby używać innej bazy danych, należy:

  • usunąć plik hsqldb-ds.xml z katalogu deploy (najlepiej przenieść do go innej katalogu)
  • utworzyć nową definicję domyślnej bazy danych specyficzną dla wybranego serwera bazodanowego

Warto pamiętać, że przykładowe konfiguracje źródeł danych dla różnych baz danych można znaleźć w katalogu $JBOSS_HOME/docs/examples/jca.

Czyli należy usunąć plik hsqldb-ds.xml a następnie utworzyć plik default-ds.xml dla bazy danych MySql:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>DefaultDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/jboss_server</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>jboss_user</user-name>
    <password>haslo</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
  </local-tx-datasource>
</datasources>

Krok 4: Konfiguracja JMS

W domyślnej konfiguracji JMS korzysta z wbudowanej bazy danych. Zakłada, że tą bazą danych jest HSQLDB. Konfiguracja dostępu znajduje się w pliku deploy/messaging/hsqldb-persistence-service.xml. Należy zamiast tego pliku przygotować konfigurację specyficzną dla bazy danych. Przykładowe konfiguracje można znaleźć w katalogu $JBOSS_HOME/docs/examples/jms.

W podanej konfiguracji wystarczy skopiować plik $JBOSS_HOME/docs/examples/jms/mysql-persistence-service.xml do katalogu deploy/messaging/ oraz usunąć plik hsqldb-persistence-service.xml.

Po tych operacjach wystarczy uruchomić ponownie serwer aplikacji JBoss i jeżeli nie wystąpiły żadne błędy, powinniśmy mieć już zdefiniowaną zewnętrzną bazę danych dla serwera.

Źródła

Tags: , , , , ,