[megoldva] systemd vs ulimit (nofile)

(másolom a kérdést a linux-haladóból, ott egyelőre konkrét válasz még nem jött, én meg ugyebár mint a duplacsövű krómozott torkosborz...)

'ola all,

belefutottam. rohadt systemd. na, összeszedem magam, a lényeg: úgy tűnik, hogy az apache, ill. néha a mysqld alól elfogynak a szabad filedescriptorok. legalábbis a jelenségek, amik az utóbbi időben történnek, erre utalnak (intenzív fájlkezeléssel járó háttérfolyamatok és intenzív sql-t használó háttérfolyamatok sajnos párhuzamosan futnak, és öklöznek egymással).

ugyebár mindenki első blikkre fut a sysctl.conf felé, hogy megnézze, hogy áll az fs.file-max. jól áll. (512000 descriptor hely. van memória, nem téma.)

aztán ha már az etc-ben jár, berúgja a megfelelő ajtót (nálam security/), és megnézi a limits.conf állapotát. némileg meglepett, mert pár installal ezelőtt hasonló okok miatt felemeltem a nofiles-t, hogy ehhez képest most factory állapot van, de biztos én felejtettem el, amikor kialvatlan szemekkel drukkoltam a gép mellett, hogy "bútolj, bútolj te rohadék". no, itt is rendbe raktam a dolgokat...

* - nofile 8192

de akárhogy léptem be, a nofiles még mindig csak 2048 volt. aztán olvastam, hogy hö, a * nem érvényes a rootra, arra külön kell, tessék, megcsináltam.

root - nofile 8192

rootként belépve az uname -a máris megfelelő, 8192-es nofiles értéket mutat. de ha mezei userként lépek be, akkor biza 2048 marad az. és ugyebár ez a PAMon kerül beállításra (ha eddig nem lett volna világos, fedora 15-ös linuxról van szó). node mi a helyzet a systemd által indított cuccokkal? mert az jó, hogy mezei userként akár forkbomb-pozitívra is beállíthatnám a rendszert, de nekem ugyebár még mindig az apache és a mysqld alá kéne betolnom több szabad descriptort.

nem tudom, hogy most akkor nekem újra kéne indítanom a szervert (nem lenne vicces, per pillanat több ezer user van bent), vagy elég csak a httpd.service-t és a mysqld.service-t újrabuggantanom, illetve hogy egyáltalán a service-eknek van-e valami közük a limits.conf-hoz. mert több helyen azt látom, hogy nem, azt máshol, a systemd-ben. csakhogy.

a systemd írói vicces emberek, de egy ilyen ilyen röhejesen egyszerű kérdésre nem tudtak még egyértelmű cikket írni. persze, a systemd a cgroups-ot használja resource limitingre, de ott meg van egy blkio, és puszipá. és akkor mégis hol a búbánatos repcefingban adjam meg a nofiles-t vagy azzal valami analógot?

szóval emberek, prittiplízvitcserriontáp, valaki árulja el már nekem, systemd-ben hogy tudnám rábírni az apache-ot és a mysqld-t, hogy több párhuzamosan nyitott filedescriptorral zúzhassák az adatokat.

Hozzászólások

mivel semmi válasz nem jött sehonnan, megkérdeztem lennartot, a systemd egyik fő fejlesztőjét. persze lecseszett némileg, hogy miért nem a listán kérdeztem meg, de itt van a válasz:

adott service unitnál a .service fájlban meg lehet adni ezt:
LimitNOFILE=
és akkor az lesz érvényes a fő és gyerekprocesszekre is egyaránt.

frissebb systemd esetén pedig a
DefaultLimitNOFILE=
direktíva a system.conf-ban, ha defaultot akarunk állítani minden processzre.

fedora 15 alatt a mysqld és a httpd még nem natív service fájlból indul, ott az /etc/init.d/httpd scriptben írtam be direktbe egy ulimit -n 8192-t, nem elegáns, de működik.

limitek ellenőrzése pedig cat /proc/
/limits
minden nap tanul valami újat az ember...