GNU/Linux >> Znalost Linux >  >> Linux

Zkontrolujte limit otevřeného FD pro daný proces v Linuxu

Můžete zkusit napsat skript, který pravidelně volá lsof -p {PID} na daném pid.


k zobrazení 20 nejlepších popisovačů souborů pomocí procesů:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

výstup je ve formátu souboru handle count, pid, cmndline for process

příklad výstupu

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

Počítejte položky v /proc/<pid>/fd/ . Tvrdé a měkké limity procesu lze nalézt v /proc/<pid>/limits .


Jediná rozhraní poskytovaná jádrem Linuxu pro získání limitů zdrojů jsou getrlimit() a /proc/ pid /limits . getrlimit() může získat pouze limity prostředků volajícího procesu. /proc/ pid /limits umožňuje získat limity zdrojů libovolného procesu se stejným uživatelským jménem a je k dispozici na RHEL 5.2, RHEL 4.7, Ubuntu 9.04 a jakékoli distribuci s jádrem 2.6.24 nebo novějším.

Pokud potřebujete podporovat starší linuxové systémy, budete muset přimět samotný proces, aby volal getrlimit() . Samozřejmě nejjednodušší způsob, jak toho dosáhnout, je upravit program nebo knihovnu, kterou používá. Pokud program spouštíte, můžete použít LD_PRELOAD k načtení vlastního kódu do programu. Pokud nic z toho není možné, můžete se připojit k procesu pomocí gdb a nechat jej provést volání v rámci procesu. Můžete také udělat totéž sami pomocí ptrace() pro připojení k procesu, vložení hovoru do jeho paměti atd., nicméně to je velmi komplikované a nedoporučuje se to.

S příslušnými oprávněními by další způsoby, jak toho dosáhnout, zahrnovaly prohlížení paměti jádra, načtení modulu jádra nebo jinou úpravu jádra, ale předpokládám, že to nepřichází v úvahu.


Linux
  1. Knihovna Python pro správu procesů v Linuxu

  2. Jak zkontrolovat velikost haldy pro proces v Linuxu

  3. Jak nastavit ID procesu v Linuxu pro konkrétní program

  1. Omezte využití paměti pro jeden proces Linuxu

  2. Linux:Zobrazení využití procesoru procesem za poslední sekundu

  3. Zkontrolujte, zda je port otevřený nebo uzavřený na serveru Linux?

  1. Linux – Omezit využití paměti pro jeden linuxový proces?

  2. Linux – Nalezení PID procesu pomocí konkrétního portu?

  3. Jak najít soubor .pid pro daný proces