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í
×
    dnes 04:33 | Bezpečnostní upozornění

    Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána nová verze 1.25 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | Nová verze

    Byla vydána beta verze Linux Mintu 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | IT novinky

    Provozovatel internetové encyklopedie Wikipedie prohrál v Británii soudní spor týkající se některých částí nového zákona o on-line bezpečnosti. Soud ale varoval britského regulátora Ofcom i odpovědné ministerstvo před zaváděním přílišných omezení. Legislativa zpřísňuje požadavky na on-line platformy, ale zároveň čelí kritice za možné omezování svobody slova. Společnost Wikimedia Foundation, která je zodpovědná za fungování

    … více »
    Ladislav Hagara | Komentářů: 1
    včera 12:55 | Nová verze

    Byla vydána verze 2.0.0 nástroje pro synchronizaci dat mezi vícero počítači bez centrálního serveru Syncthing (Wikipedie). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 2
    včera 12:33 | IT novinky

    Americký prezident Donald Trump se v pondělí osobně setkal s generálním ředitelem firmy na výrobu čipů Intel Lip-Bu Tanem. Šéfa podniku označil za úspěšného, informují agentury. Ještě před týdnem ho přitom ostře kritizoval a požadoval jeho okamžitý odchod. Akcie Intelu v reakci na schůzku po oficiálním uzavření trhu zpevnily asi o tři procenta.

    Ladislav Hagara | Komentářů: 9
    11.8. 04:55 | Nová verze

    Byl vydán Debian GNU/Hurd 2025. Jedná se o port Debianu s jádrem Hurd místo obvyklého Linuxu.

    Ladislav Hagara | Komentářů: 6
    11.8. 02:44 | Komunita

    V sobotu 9. srpna uplynulo přesně 20 let od oznámení projektu openSUSE na konferenci LinuxWorld v San Franciscu. Pokuď máte archivní nebo nějakým způsobem zajímavé fotky s openSUSE, můžete se o ně s námi podělit.

    lkocman | Komentářů: 6
    9.8. 21:11 | Nová verze

    Byl vydán Debian 13 s kódovým názvem Trixie. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 8
    9.8. 15:55 | Zajímavý software

    WLED je open-source firmware pro ESP8266/ESP32, který umožňuje Wi-Fi ovládání adresovatelných LED pásků se stovkami efektů, synchronizací, audioreaktivním módem a Home-Assistant integrací. Je založen na Arduino frameworku.

    Indiánský lotr | Komentářů: 0
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (48%)
     (20%)
     (4%)
     (5%)
     (3%)
     (1%)
     (1%)
     (17%)
    Celkem 349 hlasů
     Komentářů: 23, poslední 4.8. 13:01
    Rozcestník

    Memory profiling vo WSGI middlewari

    8.8.2015 19:30 | Přečteno: 4772× | 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.