10.2.2025

D2000 a výkonnostné ladenie skriptov

D2000 a výkonnostné ladenie skriptov

Ako viem zistiť, čo v D2000 ESL skripte mi trvá najdlhšie a kde sú jeho úzke hrdlá? Dnešný blog Vás prevedie základmi toho, čo sa nazýva v softvérovej terminológii aj profiling.

Aplikačný server reálneho času Ipesoft D2000 už od skorých verzií obsahuje proces D2000 Event. Tento má na starosť vykonávanie skriptov v jazyku ESL (Event Script Language). ESL skripty, ktoré sú voliteľnou súčasťou schém, interpretuje zas dynamická knižnica (event.dll), ktorú používa proces D2000 HI.

ESL je skriptovací jazyk vyvinutý priamo pre potreby D2000. Je to na jednej strane výhoda - v priebehu rokov pribudli rôzne akcie a funkcie, napr. podpora práce s databázami, synchrónne/asynchrónne volanie procedúr (RPC CALL) v rámci toho istého alebo vzdialeného procesu D2000 Event, parsovanie JSON a XML, práca s archívnymi dátami, inštančné ESL skripty, UNIT-y (knižnice) a iné. Na druhej nevýhoda – na rozdiel napr. od Visual Basicu nie sú k dispozícii rôzne knižnice funkcií (čo bol jeden z dôvodov, prečo v D2000 pribudla aj podpora jazyka Java).

Pre ESL vzniklo vývojové a ladiace prostredie, ktorého staršia verzia používala editačný komponent Scintilla.

Obrázok 1 – Ladenie v staršom prostredí ESL editora (D2000 verzia 11).

Neskôr (od D2000 verzie 12) sa prešlo na editor založený na Visual Studio Code, do ktorého sú dodnes dopĺňané nové vlastnosti a rôzne vylepšenia.

Obrázok 2 - Ladenie v novom prostredí ESL editora postavenom na Visual Studio Code (D2000 verzia 23).

Užívatelia sa môžu pripojiť k skriptom a ladiť ich bez ohľadu na to, či sa jedná o lokálny D2000 Event proces alebo sú skripty spustené v kontexte vzdialeného procesu (prípadne ako súčasť schémy v D2000 HI u konkrétneho užívateľa).

Čo ale v tom prípade, že nechcem ladiť konkrétny beh skriptu, ale získať informácie napr. o spotrebe pamäte alebo iných systémových prostriedkov - napr. handle otvorených súborov alebo počty/veľkosti kontajnerov či počty otvorených databáz/tabuliek?

Alebo odpoveď na veľmi konkrétnu a ťažkú otázku mnohých používateľov D2000 – prečo je môj skript pomalý a čo mu trvá najdlhšie?

Takéto a podobné otázky priviedli kolegu Borisa k tomu, aby implementoval ESL Diagnostic Pack. Jedná sa o súčasť nástrojov D2000 Cnf a D2000 GrEditor.

Principiálne sa jedná o jedno veľké okno, do ktorého sa pri otvorení nasypú informácie o všetkých ESL skriptoch v D2000 aplikácii. Jednotlivé stĺpce je možné filtrovať a zoraďovať (ak by to nestačilo, obsah okna sa dá skopírovať do schránky Windows a preniesť na podrobnejšiu analýzu napríklad do programu Excel). Aké informácie sú zobrazené o každom skripte?

  • Meno procesu, na ktorom je spustený (+ názov fyzického procesu, ktorý v prípade inštančných procesov obsahuje aj číslo inštancie).
  • Informácie o stave ESL skriptu (vykonáva sa/čaká) a o aktuálne vykonávanom riadku.
  • Počet dátových kontajnerov a množstvo nimi používanej pamäte.
  • Celková veľkosť lokálnych premenných skriptu (včítane lokálnych štruktúrovaných premenných).
  • Počet otvorených databázových spojení a tabuliek.
  • Počet otvorených súborov, JSON a XML objektov.
  • Počet požiadaviek vo fronte ESL skriptu, ktoré čakajú na obslúženie (zmeny hodnôt objektov, na ktoré skript čaká + RPC volania).
Obrázok 3 - Zoznam inštancií ESL skriptov a ich parametrov je pomerne rozsiahly ...
Obrázok 4 - ... a obsahuje informácie o používaných handloch, súboroch, kontajneroch a iných štruktúrach.

Tieto informácie sú užitočné a umožňujú ľahko diagnostikovať rôzne „leaky“ – nezatvárané spojenia/súbory, XML či JSON dokumenty, prípadne nedealokované kontajnery. Stačí zotriediť zostupne zoznam podľa vybraných stĺpcov a pozrieť sa, či sa na horných priečkach nenachádzajú neočakávane vysoké hodnoty.

Tlačidlo Refresh slúži na opätovné načítanie aktuálnych informácií o všetkých ESL skriptoch, takže je možné sledovať meniace sa hodnoty v reálnom čase.

  • Pokiaľ sa chceme povenovať konkrétnemu skriptu, tak poklikaním na jeden riadok je možné zistiť ďalšie detailné informácie o ňom:
  • Pre jednotlivé kontajnery aktuálny/maximálny počet položiek a aktuálnu veľkosť.
  • Pre jednotlivé databázové transakcie počet „IN“ a „OUT“ akcií (čítanie/zápis dát) a celkový prenesený objem údajov oboma smermi.
  • Pre jednotlivé databázové tabuľky počet „IN“ a „OUT“ akcií (čítanie/zápis dát) a celkový prenesený objem údajov oboma smermi.
  • Pre jednotlivé riadky v skripte štatistiky o počte vykonaní, celkové a maximálne aktívne trvanie akcie (napr. práca s kontajnerom), pasívne trvanie akcie (napr. čakanie na D2000 DbManager alebo D2000 Archív).
  • Pre použité UNIT-y (knižnice) všetky vyššie uvedené údaje, včítane informácii o UNIT-och nimi používaných.
Obrázok 5 - Okno ESL Diagnostic Pack s podrobnosťami o konkrétnej inštancii ESL skriptu.

Opäť, podrobné informácie je možné skopírovať napr. do Excelu a ďalej analyzovať tam. Väčšinou ale stačí (pokiaľ sa jedná o pomalosť skriptu a hľadanie kritických miest) zoradiť akcie podľa stĺpcov Duration a DurationPassive (celkové aktívne/pasívne trvanie akcie), prípadne maxDuration a maxDurationPassive  (najdlhšie aktívne/pasívne trvanie akcie) a zamerať sa na akcie, ktoré individuálne či kolektívne zaberajú najviac času.

PS: Pamätáte si ešte, že som vyššie napísal o tom, že editor ESL sa neustále vyvíja? Tak keď som sa po dopísaní tohto blogu rozprával s jeho vývojárom, dozvedel som sa, že okno s detailnými informáciami o skripte, ktoré poskytuje ESL Diagnostic Pack, je v najnovšej verzii D2000 integrované priamo do ESL editora a po pripojení sa k ESL skriptu je možné si zobrazovať tieto informácie na záložke Diagnostics:

Obrázok 6 – Detailné informácie o skripte na záložke Diagnostics v ESL editore.

Záver

ESL Diagnostic Pack je veľmi užitočným nástrojom na ladenie výkonnosti a korektnosti ESL skriptov. Tento blog si určite nekladie za cieľ vyčerpávajúco informovať o všetkých jeho možnostiach (na to má slúžiť dokumentácia), ale chce iba informovať, že takéto možnosti aplikačný server reálneho času Ipesoft D2000 už niekoľko rokov ponúka – a to všetkým jeho užívateľom a bez potreby túto užitočnú funkcionalitu extra licencovať.

19.12.2024, Ing. Peter Humaj, www.ipesoft.com

Iné blogy