Zelo pogosto se lahko pojavijo napake pri delu na močno naloženih strežnikih Linux "preveč odprte datotekes ". To pomeni, da je program odprl preveč datotek (beri deskriptorje datotek) in ne more odpreti novih. V Linuxu so omejitve za" največjo dovoljeno odprtost datotek "privzeto določene za vsak postopek in uporabnika in niso previsoke.
V tem članku bomo pogledali, kako preveriti trenutne omejitve števila odprtih datotek, kako spremeniti to nastavitev za celoten strežnik, za posamezne storitve in za sejo..
Vsebina:
- Napaka: Preveč odprtih datotek in omejitev števila odprtih datotek v Linuxu
- Omejite nastavitve za omejitve števila hkrati odprtih datotek v Linuxu
- Povečajte omejitev deskriptorjev odprtih datotek za eno storitev
- Povečanje največjega števila odprtih datotek za Nginx in Apache
- Omejitve največje datoteke za trenutno sejo
Napaka: Preveč odprtih datotek in omejitev števila odprtih datotek v Linuxu
Najprej ugotovimo, kje lahko opazimo napako »preveč odprtih datotek«. Najpogosteje se ta napaka pojavi pri strežnikih z nameščenimi spletnimi strežniki NGINX / httpd, strežnikom baz podatkov (MySQL / MariaDB / PostgreSQL), ko beremo večje število dnevnikov. Na primer, ko spletni strežnik Nginx nima dovolj omejitev za odpiranje datotek, se prikaže napaka:
socket () ni uspel (24: Preveč odprtih datotek) med povezavo z zgornjim tokom
Največje število deskriptorjev datotek, ki jih je mogoče odpreti v vašem sistemu, lahko ugotovite na naslednji način:
# mačka / proc / sys / fs / datoteka-maks
Omejitev števila odprtih datotek za trenutnega uporabnika je 1024. To lahko preverite:
# ulimit -n
Obstajata dve vrsti omejitev: Težko in Mehko. Uporabnik lahko spremeni mejo mehke meje (vendar mehka vrednost ne more preseči trde). Trde omejitve lahko spremenite le kot privilegirani uporabnik.
Za prikaz mehke omejitve izvedite:
# ulimit -nS
Za izdajo trde omejitve:
# ulimit -nH
Omejite nastavitve za omejitve števila hkrati odprtih datotek v Linuxu
Če želite vsem storitvam omogočiti odpiranje več datotek, lahko spremenite omejitve na ravni celotnega sistema Linux. Če želite, da nove nastavitve nenehno delujejo in se ob ponovnem zagonu strežnika ali seje ne morejo ponastaviti, je treba datoteko /etc/security/limits.conf popraviti. Dodaj vrstice:
* trdi nofile 97816 * soft nofile 97816
Če uporabljate Ubuntu, morate napisati vrstico:
zahtevana seja pam_limits.so
Ta parameter doda možnost nalaganja omejitev med avtorizacijo uporabnika..
Po spremembah znova zaženite terminal in preverite mejno vrednost max_open_files:
[root @ server ~] # ulimit -n
97816
Povečajte omejitev deskriptorjev odprtih datotek za eno storitev
Omejitev števila odprtih deskriptorjev datotek lahko spremenite za določeno storitev in ne za celoten sistem. Kot primer si oglejte apache. Če želite spremeniti vrednosti, odprite nastavitve storitev prek systemctl: # systemctl urejanje httpd.service
Dodajte potrebne omejitve, na primer:
[Service] LimitNOFILE = 16000 LimitNOFILESoft = 16000
Po spremembi morate posodobiti konfiguracijo storitve in jo znova zagnati:
# systemctl daemon-reload
# systemctl znova zaženite httpd.service
Če želite preveriti, ali so se vrednosti spremenile, morate dobiti storitev PID:
# statusctl status httpd.service
Na primer, definirali ste storitev PID 32724:
# mačka / proc / 32724 / omejitve | grep "Največje odprte datoteke"
Torej ste spremenili vrednosti Max open datotek za določeno storitev.
Povečanje največjega števila odprtih datotek za Nginx in Apache
Če spremenite omejitev števila odprtih datotek spletnega strežnika, morate popraviti tudi konfiguracijsko datoteko storitve. Na primer za Nginx v konfiguracijski datoteki /etc/nginx/nginx.conf, registrirati / spremeniti vrednost v direktivi:
delav_rlimit_nofile 16000Ko konfigurirate Nginx na močno naloženem 8-jedrnem strežniku z delav_connections 8192, v delav_rlimit_nofile navedite 8192 * 2 * 8 (vCPU) = 131072.
Nato znova zaženite Nginx.
Za apache morate ustvariti imenik:
# mkdir /lib/systemd/system/httpd.service.d/
Po tem ustvarite datoteko limit_nofile.conf:
# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf
In dodajte:
[Storitev] LimitNOFILE = 16000
Ne pozabite znova zagnati storitve httpd.
Omejitve največje datoteke za trenutno sejo
Če želite spremeniti omejitve odprtih datotek znotraj terminalske seje, zaženite ukaz:
# ulimit -n 3000
Ko zaprete terminal in ustvarite novo sejo, se omejitve vrnejo na začetne vrednosti, ki so določene v datoteki /etc/security/limits.conf.
Če želite spremeniti skupno vrednost v sistemu / proc / sys / fs / datoteka-maks, spremenite vrednost fs.file-max v /etc/sysctl.conf:
fs.file-max = 100000
In velja:
# sysctl -p
V tem članku smo ugotovili, kako rešiti težavo z nezadostno omejitvijo za deskriptorje odprtih datotek v Linuxu in preučili več možnosti za spreminjanje omejitev strežnika.