abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:33 | Zajímavý software

    Byl představen emulátor terminálu Ratty (GitHub) s podporu 3D grafiky přímo v terminálu. Inspirací byl operační systém TempleOS od Terryho Davise. Ratty je napsán v jazyce Rust. Využívá knihovnu Ratatui pro tvorbu rozhraní a herní engine Bevy pro 3D vykreslování.

    Ladislav Hagara | Komentářů: 0
    včera 17:55 | IT novinky

    Evropské instituce i některé americké státy dál zpřísňují pravidla pro ověřování věku na internetu. Cílem je zabránit dětem v přístupu k obsahu pro dospělé. Úřady ale narážejí na zásadní problém – stále více lidí používá VPN, tedy služby umožňující skrýt identitu i skutečnou polohu na internetu. Právě VPN nyní Evropská parlamentní výzkumná služba (EPRS) označila za „mezeru v legislativě, kterou je potřeba uzavřít“ [Novinky.cz].

    Ladislav Hagara | Komentářů: 8
    včera 17:22 | Nová verze

    Multiplatformní open source aplikace pro psaní poznámek Joplin (Wikipedie) byla vydána v nové verzi 3.6. Nově lze mít v poznámkách embedovaný externí obsah, např. YouTube videa.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Komunita

    Open Hardware Summit 2026 organizovaný OSHWA (Open Source Hardware Association) proběhne o víkendu 23. a 24. května v Berlíně na Technické univerzitě Berlín.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | Nová verze

    Navigace se soukromím CoMaps postavena nad OpenStreetMap byla vydána v nové verzi 2026.05.06. Přibyla možnost aktualizovat mapy v aplikaci CoMaps, aniž by bylo nutné aktualizovat i verzi aplikace. CoMaps je komunitní fork aplikace Organic Maps.

    Ladislav Hagara | Komentářů: 1
    10.5. 05:11 | Nová verze

    OCCT3D (Open CASCADE Technology) Open Source 8.0 bylo vydáno. OCCT3D (Wikipedie, GitHub) je objektově orientovaná knihovna pro 3D CAD, CAM nebo CAE. Používá se například v softwarech FreeCAD a KiCad.

    Ladislav Hagara | Komentářů: 5
    10.5. 02:22 | Bezpečnostní upozornění

    Ve FreeBSD byla nalezena a již opravena 21letá zranitelnost CVE-2026-42511 v dhclient. Jedná se o vzdálené spuštění kódu (RCE). Útočník mající pod správou DHCP server může získat plnou kontrolu nad systémem FreeBSD pouze jeho připojením k místní síti.

    Ladislav Hagara | Komentářů: 10
    9.5. 17:22 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    9.5. 00:11 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.3. Současně oznámila, že nadcházející větší vydání 24.04-2.0 bude mít modernější webový prohlížeč.

    Ladislav Hagara | Komentářů: 0
    8.5. 17:11 | Zajímavý projekt

    Ploopy po DIY trackballech či sluchátkách představuje nový externí DIY trackpoint se čtyřmi tlačítky Bean. Obsahuje snímač Texas Instruments TMAG5273, spínače Omron D2LS-21 a řadič RP2040, používá firmware QMK. Schémata jsou na GitHubu; sadu lze předobjednat za 69 kanadských dolarů (bez dopravy a DPH).

    |🇵🇸 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (9%)
     (2%)
     (14%)
     (31%)
     (4%)
     (7%)
     (3%)
     (16%)
     (25%)
    Celkem 1579 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Memory profiling vo WSGI middlewari

    8.8.2015 19:30 | Přečteno: 4857× | Web | Výběrový blog | poslední úprava: 8.8.2015 19:29

    Dnešný blog bude o použití heapy na hľadanie memory leakov v python wsgi aplikácii.

    Profiler heapy je súčasťou balíka guppy. Nainštalovať sa dá štandardne cez pypi (pip install guppy).

    Tutoriálov k heapy na internete moc nie je, jeden z mála ako-tak použiteľných je tu. Ukážka použitia heapy:

    from guppy import hpy
    hp = hpy()
    
    # inicializácia aplikácie
    hp.setrelheap()
    kriticka_cast()
    heap = hp.heap()
    
    print(heap)

    WSGI Middleware

    Middleware je funkcia (alebo funkcionálny objekt) s parametrami environ (prostredie nastavené webserverom, okrem iného obsahuje query string a požadovanú cestu) a start_response (funkcia ktorá sa musí zavolať pred vrátením generátora).

    Riadenie som zabezpečil GET parametrami debugmem_relheap (nastavenie referenčnej hodnoty heapu, po zavolaní bude zapisovať rozdiely voči tejto hodnote), debugmem_live (zapnutie pdb) a debugmem_dump (zápis snapshotu do súboru profile.hpy)

    # -*- coding: utf-8 -*-
    from guppy import hpy
    
    from .wsgi import application
    
    
    class StatsMiddleware(object):
        def __init__(self, app):
            super(StatsMiddleware, self).__init__()
            self.app = app
            self.hp = hpy()
    
        def start_ok_response(self, start_response):
            status = '200 OK'
            response_headers = [('Content-type', 'text/plain')]
            start_response(status, response_headers)
    
        def __call__(self, environ, start_response):
            if 'debugmem_dump' in environ.get('QUERY_STRING', ''):
                heap = self.hp.heap()
                heap.dump('profile.hpy')
    #            heap_response = [
    #                '\nHeap\n',
    #                str(heap),
    #                '\nrcs\n',
    #                str(heap.byrcs),
    #                '\nrcs[0]\n',
    #                str(heap.byrcs[0].byid),
    #                '\nrp\n',
    #                str(heap.get_rp()),
    #                '\nModules\n',
    #                str(heap.bymodule),
    #            ]
                self.start_ok_response(start_response)
    #            for item in heap_response:
    #                yield item
            elif 'debugmem_live' in environ.get('QUERY_STRING', ''):
                heap = self.hp.heap()
                self.start_ok_response(start_response)
                import pdb
                pdb.set_trace()
            elif 'debugmem_relheap' in environ.get('QUERY_STRING', ''):
                self.hp.setrelheap()
                self.start_ok_response(start_response)
            else:
                for item in self.app(environ, start_response):
                    yield item
    
    
    application = StatsMiddleware(application)
    

    Použitie

    Po obalení vlastnej wsgi alikácie do middlewaru je možné ovládať profiler pomocou GET parametrov. Zvyčajný postup je:

    Zobrazenie priebehu stavu pamäte v grafe

    Pre ukladanie profilu v určených intervaloch je možné použiť jednoduchý skript (použitie ./skript http://adresa/):

    #!/bin/bash
    
    ADDRESS=$1
    REPEAT_COUNT=10
    
    curl "${ADDRESS}" > /dev/null
    curl "${ADDRESS}?debugmem_relheap"
    
    while true
    do
        for i in `seq $REPEAT_COUNT`
        do
            curl "${ADDRESS}" > /dev/null
        done
        curl "${ADDRESS}?debugmem_dump"
    done

    Zobraziť graf je možné cez integrovaný prehliadač heapy:

    from guppy import hpy
    hp = hpy()
    hp.pb('profile.hpy')

    Použitie v pdb

    Pre prepnutie aplikácie do debuggeru pdb stačí zavolať url s parametrom ?debugmem_live. Aktuálne štatistiky s v lokálnej premennej heap:

    (Pdb) heap
    Partition of a set of 189233 objects. Total size = 27139464 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0  72048  38  6146088  23   6146088  23 str
         1  48920  26  4136056  15  10282144  38 tuple
         2  10719   6  2580752  10  12862896  47 unicode
         3   2383   1  1796200   7  14659096  54 dict (no owner)
         4  13848   7  1661760   6  16320856  60 function
         5    661   0  1615096   6  17935952  66 dict of module
         6  12111   6  1550208   6  19486160  72 types.CodeType
         7   1557   1  1415928   5  20902088  77 dict of type
         8   1557   1  1406488   5  22308576  82 type
         9   2313   1   331656   1  22640232  83 list
    <702 more rows. Type e.g. '_.more' to view.>
    
    (Pdb) heap.byrcs
    Partition of a set of 189233 objects. Total size = 27140232 bytes.
     Index  Count   %     Size   % Cumulative  % Referrers by Kind (class / dict of class)
         0  65049  34  5867160  22   5867160  22 types.CodeType
         1  16121   9  1903488   7   7770648  29 function
         2  23610  12  1809464   7   9580112  35 tuple
         3   5071   3  1709360   6  11289472  42 type
         4   4407   2  1655128   6  12944600  48 function, tuple
         5  12880   7  1585352   6  14529952  54 dict of type
         6   7195   4  1553200   6  16083152  59 dict of module
         7    465   0  1217688   4  17300840  64 function, module
         8  10607   6   792688   3  18093528  67 dict (no owner)
         9   2665   1   555704   2  18649232  69 dict of module, tuple
    <2579 more rows. Type e.g. '_.more' to view.>
    
    (Pdb) heap[5].byrcs
    Partition of a set of 661 objects. Total size = 1615096 bytes.
     Index  Count   %     Size   % Cumulative  % Referrers by Kind (class / dict of class)
         0    464  70  1216640  75   1216640  75 function, module
         1    179  27   342728  21   1559368  97 module
         2     15   2    38760   2   1598128  99 function, module, types.FrameType
         3      1   0    12568   1   1610696 100 dict (no owner), dict of email.LazyImporter, dict of
                                                 module, guppy.heapy.heapyc.RootStateType, module,
                                                 types.FrameType
         4      1   0     3352   0   1614048 100 guppy.heapy.heapyc.RootStateType, module
         5      1   0     1048   0   1615096 100 module, types.FrameType
    
           

    Hodnocení: 100 %

            špatnédobré        

    Obrázky

    Memory profiling vo WSGI middlewari, obrázek 1 Memory profiling vo WSGI middlewari, obrázek 2 Memory profiling vo WSGI middlewari, obrázek 3

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Bedňa avatar 10.8.2015 23:43 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari
    Byť manažérom poviem dobré, byť kodérom, dokonči čo chceme a nerieš pičoviny :-)
    KERNEL ULTRAS video channel >>>
    vlastikroot avatar 11.8.2015 00:52 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari
    Nevim zrovna tady, ale (memory) profiling je asi docela dulezita prace vyvojare. Ja napr. ted resim pomalost moji aplikace v QML na ARMu. A to je jen zacatek, pro nonstop beh budu muset resit i tu pamet - memory leaky atd.
    We will destroys the Christian's legion ... and the cross, will be inverted
    mirec avatar 11.8.2015 12:49 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari

    Hmm, zaujímavé, dali by sa napísať nejaké detaily (chápem, že niektorí ľudia majú zmluvne zakázané hovoriť o produkte, ja som o tomto tiež nesmel hovoriť kým nebol produkt hotový).

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    vlastikroot avatar 11.8.2015 13:27 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari

    Je to aplikace na predni panel zesilovace. Vicemene to ovlada pres seriovy port ridici desku, ktera prepina a nastavuje ruzne elektronicke potenciometry a spinace/relatka (tzn. digitalne ovladany analog). Ridici deska navic meri ruzna mista v zesilovaci (napr. napajecky, vystupni napeti/proudy atd.) a tim dela realtime diagnostiku jak zesilovace, tak reproduktoru. Vsechny tyhle veci jsou pristupny pres network client/server. Ta QML aplikace je vlastne jen klient k ty siti. Je to napsane hodne v QML/JS, jen ta sitova cast je v C++ (pristupna v QML pres Q_PROPERTY a Q_INVOKABLE). Bezi to pres EGLFS primo nad framebufferem, ale je tam jadro 2.6.35, ktere asi jeste ma problem s tickama (kdyz jsem zvysil na 1000Hz, vsechno se zlepsilo).

    We will destroys the Christian's legion ... and the cross, will be inverted
    Bedňa avatar 11.8.2015 22:53 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari
    Bug report:
    This page was unable to display a Google Maps element. The provided Google API key is invalid or this site is not authorized to use it. Error Code: InvalidKeyOrUnauthorizedURLMapError
    KERNEL ULTRAS video channel >>>
    mirec avatar 12.8.2015 07:54 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari

    Nie som autorom webu. Ja som robil len webové konfiguračné rozhranie pre zariadenie a dotykové UI v QML ;)

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    11.8.2015 12:30 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari
    Snad opačně, ne?
    mirec avatar 11.8.2015 12:44 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari

    Neviem ako inde, ale môjho zamestnávateľa by asi dosť trápilo keby kvôli nejakej drobnosti ako zabudnuté vyčistenie cache dochádzalo na serveri k OOM.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Bedňa avatar 11.8.2015 22:51 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari
    Ber to s humorom, chcelo to nakopnúť diskusiu ;-)
    KERNEL ULTRAS video channel >>>
    mirec avatar 12.8.2015 07:55 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari

    V tomto počasí neberiem s humorom nič. Najradšej by som vonku behal nahý s plameňometom, ale je mi na to moc teplo.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Bedňa avatar 12.8.2015 10:51 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari
    Ja som si už zvykol, keď to spadne pod 32 začína mi byť chladno..
    KERNEL ULTRAS video channel >>>
    mirec avatar 12.8.2015 12:54 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Memory profiling vo WSGI middlewari

    Mne tu ukazuje teplomer hnusných 24.6°C (po všetkých opatreniach okrem klimatizácie ktoré ma napadli vrátane obalenia časti domu na ktúrú svieti slnko alobalom [a áno vyzerá to úplne nahovno]).

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.