Az OProfile egy teljesítményprofilozó a Linux számára. Ebben a cikkben azt vizsgáljuk, hogy mit csinál, hogyan kell telepíteni és konfigurálni, és hogyan lehet felhasználni az összegyűjtött adatokat.
Kíváncsi lehet, miért lenne szüksége ilyen eszközre, mivel alapértelmezés szerint rengeteg jó teljesítményelemző eszköz áll rendelkezésre a legtöbb Linux disztribúción. Minden telepítés olyan eszközöket tartalmaz, mint a top és a vmstat, és a segédprogramok, például a strace nyomon követése általában csak egy apt-get away. Hova illeszkedik az OProfile?
A korábban említett eszközök kiválóak ahhoz, hogy valós időben elkészítsenek egy pillanatképet egy Linux rendszerről. Az olyan eszközök, mint a top vagy a htop, bemutatják az összes futó folyamatot, azok aktuális memóriafelhasználását és processzorhasználatát. De problematikussá válik annak ismerete, hogy a folyamatok és a rendszerhívások mennyire fogyasztják a legtöbb erőforrást.
Ott jön be az OProfile. Ez a segédprogramcsomag nemcsak mélyebb szinten végzi az elemzését, hanem adatokat is ment és lehetővé teszi, hogy olyan teljesítményjelentéseket készítsen, amelyek rengeteg információt kínálnak, amelyek segítenek a legmegfoghatatlanabb teljesítményproblémák hibakeresésében is.
Az OProfile nem csak a fejlesztők számára készült. Asztali környezetben az OProfile segíthet a processzorigényes háttérfeladatok vagy az I / O hívások felkutatásában, amelyek lassítanak és nem azonnal nyilvánvalóak. Egy forgalmas rendszerben, ahol a folyamatok prioritásai váltakoznak, ezeket az adatokat nehezen lehet gyűjteni, nemhogy értelmezni. A szerverkörnyezet többfolyamatos jellege ezt a feladatot a hagyományos eszközökkel még nehezebbé teszi.
Ennek ellenére a fejlesztők kétségtelenül a lehető legtöbbet használják ki az OProfile-ból. Az általam bemutatott információk mindkét felhasználási eset alapjaira kiterjednek, így belemerülhet bármely Linux program teljesítménymutatóiba.
Telepítés
Nagyon fontos megjegyzést kell megtenni, mielőtt mélyen belemerülne az OProfile-ba - előfordulhat, hogy nem tudja telepíteni virtualizált környezetbe. Ha Linuxot egy VirtualBox, VMWare vagy hasonló virtuális gép környezetben futtat, előfordulhat, hogy az OProfile nem tudja elérni az adatgyűjtéshez szükséges teljesítményszámlálókat. Továbbá, még ha képes is használni virtuális környezetben, a pontos időzítés kissé torzulhat a gazdagép terhelése alapján, ezért kérjük, ne feledje ezt, ha nem natív hardveren fut.
Számos Linux disztribúció csomagkezelő rendszereiben van OProfile, ami megkönnyíti a telepítést:
- Debian / Ubuntu / Linux Mint - sudo apt-get install oprofile
- Fedora / CentOS - sudo yum install oprofile
- Arch - sudo pacman -S oprofile
Egyszerű példa
A program telepítése után nedvesítsük meg a lábunkat egy triviális, mégis hasznos példával. Az „ls” program valószínűleg mindig használt parancs. Egyszerűen megjeleníti a fájlok és mappák listáját az aktuális könyvtárban. Nézzük meg a kimenetét:
sudo operf ls
Látni fog valami hasonlót a fenti képernyőképhez. Miután a profilozó elkészült, bejelenti a „Profil kész.”Adatait egy oprofile_data nevű mappába mentette, amely felhasználható jelentés készítéséhez.
Az opreport parancs futtatása (ebben az esetben sudo nélkül) ehhez hasonló jelentést hoz létre:
Ebben a példában az alapértelmezett jelentés megmutatja a minták számát, amikor a CPU nem volt HALT állapotban (más szóval, aktívan csinált valamit). A Kallsyms szimbólumkeresést nyújt a profilozó és az ld által.így és libc.a glibc csomag része, egy szinte az összes Linux futtatható fájlba kapcsolt közös könyvtár, amely alapvető funkciókat biztosít a fejlesztők számára, hogy megakadályozzák a kerék újratalálását és általános szintű kompatibilitást biztosítsanak a különböző rendszerek között. Láthatja, hogy a tényleges program ls sokkal kevesebb volt a nem HALT ideje - a nehéz emelés nagy részét a szokásos könyvtárak végezték.
Miután elkészültünk a jelentéssel, célszerű vagy eltávolítani az adatmappát, vagy elmenteni későbbi elemzés céljából. Ebben a példában csak eltávolítjuk, mivel mintagyakorlatokat futtatunk. Mivel a parancsot sudo-val futtattuk, el kell távolítanunk a sudo mappát. Légy óvatos!
sudo rm -Rf oprofile_data
Összetettebb példa
Ebben a következő példában egy olyan programot futtatunk, amely valójában valami bonyolultabb feladatot hajt végre, nem csak az aktuális mappában lévő fájlokat sorolja fel. Töltsük le a WordPress alkalmazást a wget segítségével.
sudo operf wget http: // wordpress.org / legújabb.kátrány.gz
E példa után létrehozhatunk egy jelentést az „opreport” paranccsal:
Sokkal több tevékenységet fog látni ez után. A wget parancsnak nagyon sok munkát kellett elvégeznie a kulisszák mögött, hogy megszerezze a WordPress legújabb példányát. Bár nem szükséges megvizsgálni az egyes elemeket, az érdekes érdekességek a következők:
- ath9k és ath9k_hw - Ezek a modulok felelősek a laptop WiFi-kapcsolatáért.
- mac80211 és cfg80211 - Ezek a könyvtárak fontos szerepet játszottak a wget által megkívánt hálózati kapcsolat végrehajtásában.
- libnss_dns és libresolv használtak a wordpress megoldásában.org domain IP-címre, hogy a wget HTTP-kapcsolatot tudjon létrehozni.
- libcrypto és libssl - Ezek a könyvtárak az OpenSSL könyvtár részei. Ezzel elvégezte a kapott adatok dekódolását a https: // url-ből. Vegye figyelembe, hogy annak ellenére, hogy URL-t adtunk meg a http: // paranccsal, a WordPress szerver átirányított minket a https: // webhelyre, és a wget követte ezt az átirányítást.
- libpthread - Ez a könyvtár szálkezelési műveleteket hajt végre, amelyek lehetővé teszik a programok számára, hogy egyszerre több dolgot végezzenek. Ebben az esetben a wget elindított egy szálat a program letöltéséhez, és egy ASCII-alapú letöltés előrehaladási mutatót is megjelenített a képernyőn.
Ez a fajta adat rengeteg információt nyújthat a fejlesztő számára. De mennyire fontos ez egy kiszolgáló rendszergazdájának vagy egy asztali felhasználónak? Annak tudatában, hogy a program mely részei veszik igénybe a legtöbb CPU-időt, megtudhatjuk, hogy mit kell optimalizálni, vagy hol történik a lassulás, lehetővé téve számunkra, hogy jobb döntéseket hozzunk a rendszerünk optimalizálásáról.
Ebben a példában a legtöbb CPU-időt a crypto / SSL rutinok vették igénybe. Ez érthető, mert a rejtjelezés időigényes feladat. Megvolt a wordpress.Az org webhelye nem irányított át minket a https: // webhelyre. Ezt a könyvtárat nem használták volna, ezzel megtakarítva a CPU idejét. A hálózati réteget továbbra is használták volna, de a vezetékes kapcsolat használata vezeték nélküli kapcsolat helyett valószínűleg kevésbé adóztatta volna meg. Ha a wget programban letiltja a folyamatjelzőt (az -nv kapcsolón keresztül), akkor a CPU ideje spórolt volna a letöltés előrehaladásának megjelenítésében.
Szimbólumokba ásni
Annak ellenére, hogy az alapértelmezett jelentés értékes és hasznos információkat nyújt, tovább tudunk ásni. Ennek futtatásával:
opreport --demangle = smart --szimbólumok
Megtudhatjuk, hogy a könyvtárakban pontosan mennyi CPU-idő működik:
Ebben a példában a fenti wget parancsot használtam, de egy http: // URL-t használtam (amely nem irányít át a https: // -re), és láthatja az OpenSSL könyvtárak hiányát a nyomokban. A könyvtár neve helyett azonban most már teljes listát kapunk az érintett funkciókról. Mint látható, a hálózati réteg a CPU nem HALT idejének nagy részét elfogyasztotta.
A következő szintre emelés
Az előző példákban az OProfile-t használtuk arra, hogy egyszerre csak egy programot nézzünk meg. Az egész rendszert egyszerre megvizsgálhatja a -system-switch kapcsolóval:
sudo operf - a rendszer egészére kiterjedően
Ezzel a technikával az OProfile ugyanúgy gyűjti a statisztikákat, és leáll, amikor lenyomja a CTRL + C billentyűt. Ezután futtathatja az opreport parancsot. Mivel a profilozó valószínűleg sokkal több adatot fog generálni (különösen asztali vagy elfoglalt kiszolgálón).
beszámoló & gt; jelentés.txt
A jelentés most a jelentés nevű fájlban tekinthető meg.txt
Alacsony rezsi
Fontos megjegyezni, hogy bár az OProfile nem zavarhatja a programok működését, egy kis rezsit hoz létre és ezáltal lelassítja a végrehajtást. A fenti egyszerű példáinkban ez nem okozott problémát, de egy hosszú végrehajtású és kiterjedt függvényhívásokkal rendelkező programnál valószínűleg észrevesz egy különbséget. Emiatt nem javasolnám ennek a programnak a használatát éles kiszolgálói környezetben, kivéve, ha kritikus teljesítményproblémával szembesülök, amelyet élő használat mellett kell megoldani. Akkor is elég hosszú ideig használnám, hogy megtaláljam a problémát.
Következtetés
Az OProfile egy hatékony teljesítményprofil-eszköz. Kihasználja a Linux alatt elérhető legalacsonyabb szintet, hogy teljesítményszámlálókat és mutatókat szerezzen, amelyek értékes információkat nyújtanak a programjairól.
Elmúltak a találgatások napja a teljesítményhiba-keresés során - most megvan az ereje, hogy pontosan tudja, mit csinál a rendszere, és hogyan lehetne javítani rajta. Az OProfile által generált jelentések tanulmányozásával megalapozott, adatközpontú döntéseket hozhat a rendszer optimalizálásáról.