wtorek, listopada 29, 2011

Niekonwencjonalne metody działania Pana Boga

Adwent. Powinniśmy się skupić na fakcie, że Pan Bóg przychodzi. Współczesny za szybki tryb życia i nasze przyzwyczajenia nie za bardzo w tym pomagają. Czasem potrzebny jest jakiś silny bodziec z zewnątrz. Wczoraj miałem włam na chatę i zarąbali mi dwa laptopy. Za dużo pracowałem ostatnio, a teraz jestem wolny :) Zostawili nettopa, bo nie wiedzieli, że to komputer - w sam raz do włączenia Radia eR (o 19-tej jest msza z Archikatedry Św. Jana, nowy arcybiskup ma fajne katechezy) lub RDN Małopolska oraz poczytania MateuszaOpoki, czy Bartosika, ale nie za długo.

wtorek, listopada 22, 2011

Chmura na kryzys

Producenci drogiego pudełkowego oprogramowania powinni przy drugiej fali kryzysu zauważyć następującą rzecz: klientowi zaciskającemu pasa nie będą w stanie sprzedawać swoich produktów tak jak do tej pory. Poza tym klient będzie uciekał od modelu licencyjnego per CPU w wirtualizację (drastyczny przypadek: w VMWare ESXi 5 można stworzyć maszynę z 1 podstawką procesora i 16. rdzeniami - i zainstalować na niej Windows Server Standard Edition). Jedyną szansą na sprzedaż może być subskrypcja w modelu Software-as-a-Service. Przy atrakcyjnych cenach dostosowanych do wielkości użycia oprogramowania można też powalczyć o mniejszych klientów. Trzeba myśleć jak Warren Buffet - widzieć zagrożenia ale też i szanse. I być zwinnym.

Ile kosztuje miesięcznie 30 komponentów Tibco w ramach Silver public (5 centów za 1h)? 3 600 zł + opłaty za Amazon EC2 (podobne koszty).

niedziela, listopada 20, 2011

BW WS crash test

Tworzymy jeden WebService z operacjami 'a', 'b', 'c'. Operacja 'a' woła na tym samym komponencie dwa razy pod rząd operację 'b', operacja 'b' 4 razy operację 'c'. Operacja 'c' na wyjściu zwraca wejście. Teraz z SOAPUI 20 wątkami przez 60 sekund wywołujemy operację 'a' (z jednego zewnętrznego requestu robi się 10 wewnętrznych). Poniżej przepisana kontrolka SOAP Request Reply wykorzystująca JBoss Netty, wytrzymuje większą liczbę równoległych wywołań.



MaxJobs.x.serviceagent=250
FlowLimit.x.serviceagent=250
ActivationLimit.x.serviceagent=true
EnableOnStartup.x.serviceagent=true
bw.plugin.http.server.maxProcessors=250
bw.plugin.http.server.acceptCount=250
bw.plugin.http.server.httpcomponents.workerThread=40

25 transakcji na sekundę w SOAPUI oznacza 250 wywołań wewnątrz BW. Na dwurdzeniowym energooszczędnym Intelu SU4100 1,3GHz 10W TDP na Windows 7 można dojść z Netty do 35tps.

Po włączeniu persystentnych połączeń BW jest w stanie przy 20 wątkach w SOAPUI dostarczyć 45tps. Limit jest ściśle związany z liczbą równoległych połączeń na wejściu i wątków ResponseThreadPool.

bw.plugin.http.client.usePersistentConnectionManager=true
bw.plugin.http.client.usePersistentConnectionManagerForSSL=true (BW 5.12+)
bw.plugin.http.client.checkForStaleConnections=false
bw.plugin.http.client.maxConnectionsPerHost=500
bw.plugin.http.client.maxTotalConnections=500
bw.plugin.http.client.ResponseThreadPool=40
bw.plugin.http.client.ResponseThreadPool.type=single

piątek, listopada 18, 2011

Tibco BW JDBC Memory Leak

Jeśli PreparedStatement typu SELECT w BW nie zawiera parametrów [statement.indexOf('?')!=-1] to nie jest cache-owany (ale nie jest też zamykany, cała nadzieja w GC). W przeciwnym przypadku JDBCPoolManager trzyma pulę obiektów JDBCConnectionEntry, które to trzymają rosnący (per każdy nowy proces) wektor otwartych PreparedStatement-ów. Błędu wycieku cache-owanych zapytań nie mają aktywności UPDATE i SQL DIRECT. Zwalnianie zasobów odbywa się na zasadzie zamykania nieużywanych przez ostatnie 300 sekund połączeń JDBC.

czwartek, listopada 17, 2011

poniedziałek, listopada 14, 2011

Linux power drain solved

Phoronix should be happy.

niedziela, listopada 13, 2011

Luther

Facet, który ma pod górkę. Jego zachowania balansują na granicy autodestrukcji. Popełnia błędy, gwałtownie reaguje, ale w ogólnym rozrachunku jest skuteczny. Ma dziwne relacje z inteligentną neurotyczną morderczynią. Serial trzyma w napięciu... i nie jest amerykański. Zrobiło go BBC! W niedzielę po 20-tej w Ale Kino.

Muzyka na wejście to Massive Attack 'Paradise Circus'. A w House-ie 'Teardrop'.

EMS: korelacja komunikatów po stronie klienta, crash testy

Korelacja komunikatów po stronie klienta, to sprytny sposób na obejście problemu wydajnościowego z GetQueueMessage (za każdym razem nowa sesja i nowy konsument z selektorem), ale:
rozwiązanie jest wrażliwe na odkładanie się dużej ilości komunikatów na kolejce (trzeba "przejrzeć" wszystkie, żeby sparować kilka); komunikaty mogą ginąć - utykać w pobraniu wstępnym sesji (prefetch != none) - wtedy widzimy objawy timeout-ów w komunikacji request-response.

piątek, listopada 11, 2011

Vaadin - jeszcze szybszy sposób na raport




Framework pozwala na bardzo szybki dewelopment. No i używa go Tomek - a to jest poważny argument za :)

BIRT - szybki sposób na raport


środa, listopada 09, 2011

Fenomen Internetu jest czasami porażający

poniedziałek, listopada 07, 2011

Tusk chce odstrzelić Schetynę

Za wp.pl: 'Z nieoficjalnych informacji "Wiadomości" wynika, że Schetyna miałby zostać w nowym rządzie ministrem transportu. Schetyna - twierdzą "Wiadomości" właśnie podczas spotkania z premierem usłyszał taką propozycję'.
Nie byłoby kwiatów po wotum nieufności.

5 x Dlaczego?

Kadra zarządzająca bez odpowiednich kwalifikacji, w tym etycznych; "pływanie" w korporacji; brak obiektywnych audytów; fałszywe raportowanie sukcesów i zamiatanie problemów pod dywan; brak wizji, długoterminowej i dostosowywanej na bieżąco strategii, chaos i degradacja.

niedziela, listopada 06, 2011

JMS Wrapper

Koncepcja ta w Weblogicu stosowana jest od dawna i ma na celu zapewnić większą niezawodność oraz wydajność. Do czego przydałby się JMS Wrapper w Tibco BusinessWorks? Do transparentnego przywracania połączenia JMS i ukrywania wyjątków związanych z wadliwym połączeniem, do obsługi konfiguracji serwerów primary-secondary (w szczególności odbierania odpowiedzi z dwóch sewerów przez jeden logiczny MessageConsumer, kiedy wcześniej nastąpiła awaria serwera primary i przełączenie na secondary), do trzymania w pamięci podręcznej obiektów, których stworzenie jest czasochłonne (nowa sesja i nowy receiver z selektorem w przypadku komunikacji request-response; umieszczenie w cache-u sesji i zmodyfikowanego receivera powinno dramatycznie zmniejszyć obciążenie serwera przy dużych wolumenach komunikatów), do wymuszania SLA przy próbie wysyłania nadmiernej ilości danych do serwera JMS.

środa, listopada 02, 2011

GUI do Solaris Cluster

/usr/sbin/cacaoadm enable; /usr/sbin/smcwebserver enable

SUNW.Proxy_SMF_failover to zasób bazujący na serwisie SMF!

Straciłem zaufanie do Solaris Cluster

root@sx:/builds/ohac/usr/src# /usr/gnu/bin/grep -c -r XXX * | grep -v ":0"
cmd/scshutdown/scshutdown.c:1
cmd/mdm/rpc.metacld/common/mdc_init.c:2
cmd/dcs/run_reserve.ksh:1
cmd/dcs/scvxvmck.cc:2
cmd/dcs/reserve.cc:5
cmd/dcs/scsi.cc:2
cmd/dcs/scgdevs.c:2
cmd/scqsd/QuorumServer.cc:1
cmd/ha-services/hafoip/hafoip_start.c:1
cmd/ha-services/hafoip/hafoip_prenet_start.c:1
cmd/ha-services/hafoip/hafoip_stop.c:1
cmd/ha-services/haevent/event.c:1
cmd/ha-services/hastorageplus/hastorageplus_common.c:1
cmd/ha-services/hascip/hascip_init.c:1
cmd/rpc.scxcfg/scxcfgd_svc.c:2
cmd/rpc.scxcfg/scxcfgd_ccr.cc:1
cmd/scconf/scconf.c:1
cmd/cl_apid/cl_apid_main.cc:1
cmd/cl_apid/caapi_event.cc:1
cmd/cl_apid/caapi_mapping.cc:3
cmd/cl_apid/caapi_reg_cache.cc:4
cmd/cl_apid/caapi_event.h:1
cmd/cl_apid/caapi_mapping.h:1
cmd/cl_apid/client_reg_info.cc:2
cmd/ssm_wrapper/ssm_ipmp.c:1
cmd/ssm_wrapper/ssm_call.c:5
cmd/ssm_wrapper/ssm_net.c:2
cmd/ssm_wrapper/ssm_ipmp_callback.c:1
cmd/cmm/pmmd/pmmd_impl.cc:10
cmd/cmm/pmmd_adm/pmmd_adm.cc:3
cmd/cl_eventd/cl_eventd.cc:3
cmd/pxfs/clexecd.cc:4
cmd/replctl/replctl_main.cc:1
cmd/did/didadm.c:3
cmd/rpc.clquery/clquery_device.c:3
cmd/rpc.clquery/rpc_queue.c:8
cmd/rpc.clquery/rpc_manager.c:2
cmd/rpc.clquery/clquery_network.c:3
cmd/rpc.clquery/clquery_main.c:3
common/cl/repl/repl_mgr/rm_repl_service.cc:13
common/cl/repl/repl_mgr/rm_state_mach.cc:8
common/cl/repl/repl_mgr/cb_coord_control_impl.cc:4
common/cl/repl/repl_mgr/repl_mgr_impl.cc:4
common/cl/repl/repl_mgr/dependency_mgr_impl.cc:1
common/cl/repl/repl_mgr/service_admin_impl.cc:1
common/cl/repl/repl_mgr/dependency_mgr_impl.h:1
common/cl/repl/rmm/rmm.cc:3
common/cl/repl/service/replica_handler.cc:4
common/cl/repl/service/repl_service.h:2
common/cl/repl/service/multi_ckpt_handler.cc:1
common/cl/repl/service/repl_service.cc:3
common/cl/libuos/uos_misc.cc:1
common/cl/libuos/cladm_impl.cc:9
common/cl/clprivnet/clprivnet.h:3
common/cl/cmm/membership_engine_impl.cc:33
common/cl/cmm/automaton_impl.cc:4
common/cl/cmm/cmm_comm_impl.cc:1
common/cl/cmm/callback_registry_impl.cc:1
common/cl/cmm/ucmm_comm_impl.cc:22
common/cl/cmm/membership_manager_impl.cc:52
common/cl/cmm/ff_impl.cc:8
common/cl/cmm/cmm_impl.cc:1
common/cl/cmm/ucmm_api.h:1
common/cl/cmm/ucmm_impl.cc:8
common/cl/pxfs/lib/pxfs_misc.cc:1
common/cl/pxfs/client/pxspecial.cc:3
common/cl/pxfs/client/pxvfs.cc:12
common/cl/pxfs/mount/mount_server_impl.cc:13
common/cl/pxfs/mount/mount_client_impl.cc:21

Podobnie można zrobić dla " bug " i " workaround ", można jeszcze poczytać:

// XXX Pass by reference of cast value doesn't work with SC5.2
// XXX Need to file a bug, in the mean time we can work around
// XXX it by passing in the proper type and cast it back.

Sterowniki klastra będące modułami jądra Solaris pisane są w C i C++. Dodatkowo kod kompilowany jest w trybie debug, a wynikowe obiekty podlegają zmianom strukturalnym. Część funkcji dla klastra jest już w jądrze Solarisa, a moduły je przykrywają. Po przejściu problemu w cl_boostrap z inicjalizacją w nv151  pojawiają się dalsze awarie wynikające z tego, że Sun Cluster został skompilowany innym kompilatorem (z innymi CFLAGS) niż system. Mamy w jądrze kod i ABI strasznie wrażliwe na zmiany kompilatora. Klaster dodatkowo grzebie w 3-ciej warstwie modelu OSI i może nie być kompatybilny ze wszystkimi sterownikami kart sieciowych.

CTF is generated from stabs, and stabs are only generated in debug mode (-g). Unfortunately debug mode has side-effects:
- It disables the inline generation of functions and this can have a major  impact on performance. The C++ compiler provides the option -g0 that provides the same feature as  the -g option but does not disable inlining.
- It enables variable globalization which means that static local variables  will be defined as global instead of local and will have their names made unique by prepending a file specific global prefix. This increases the size of binaries and can break mdb debugging modules which are using some static  symbol defined in Sun Cluster.
The Sun Studio 10 and 11 C++ compilers have no option to disable  globalization. RFE 6289358 is opened get this option. While this option is  not available, globalization can be disabled by using the -G option of the ctfconvert binary.
- On sparc, it disables tail-call optimization so this creates less optimized  code and this can impact performance. The C++ compiler provides the option -Qoption cg -Qiselect-T1 to re-enable tail-call optimization.
The debug mode has no other known side-effects. Some other optimizations which may have been disabled will be re-enabled by the -xO3 optimization level.