Vrlo često se mogu pojaviti pogreške pri radu na jako učitanim Linux poslužiteljima "previše otvorene datotekes ". To znači da je program otvorio previše datoteka (pročitajte deskriptore datoteka) i ne može otvoriti nove. U Linuxu su ograničenja„ najveće otvorene datoteke “postavljena prema zadanim postavkama za svaki postupak i korisnika i nisu previsoka.
U ovom ćemo članku pogledati kako provjeriti trenutna ograničenja broja otvorenih datoteka, kako promijeniti ovu postavku za cijeli poslužitelj, za pojedinačne usluge i za sesiju..
sadržaj:
- Pogreška: Previše otvorenih datoteka i ograničenja broja otvorenih datoteka u Linuxu
- Ograničite postavke za ograničenje broja istovremeno otvorenih datoteka u Linuxu
- Povećajte ograničenje deskriptora otvorenih datoteka za jednu uslugu
- Povećanje maksimalnog broja otvorenih datoteka za Nginx i Apache
- Ograničenje najveće datoteke za trenutnu sesiju
Pogreška: Previše otvorenih datoteka i ograničenja broja otvorenih datoteka u Linuxu
Prvo, shvatimo gdje možemo promatrati pogrešku "previše otvorenih datoteka". Najčešće se ta pogreška pojavljuje na poslužiteljima s instaliranim NGINX / httpd web poslužiteljima, poslužiteljem baze podataka (MySQL / MariaDB / PostgreSQL), prilikom čitanja velikog broja dnevnika. Na primjer, kada web-poslužitelj Nginx nema dovoljno ograničenja za otvaranje datoteka, dobit ćete pogrešku:
socket () nije uspio (24: Previše otvorenih datoteka) dok se povezujete uzvodno
Najveći broj deskriptora datoteka koji se mogu otvoriti na vašem sustavu može se naći na sljedeći način:
# mačka / proc / sys / fs / file-max
Ograničenje broja otvorenih datoteka za trenutnog korisnika je 1024. To možete provjeriti:
# ulimit -n
Postoje dvije vrste ograničenja: teško i mekan. Korisnik može promijeniti ograničenje za soft limit (ali meka vrijednost ne može prijeći tvrdu). Tvrdo ograničenje može se promijeniti samo kao povlašteni korisnik.
Da biste prikazali soft-ograničenje, izvršite:
# ulimit -nS
Za stvaranje tvrdog ograničenja:
# ulimit -nH
Ograničite postavke za ograničenje broja istovremeno otvorenih datoteka u Linuxu
Da biste svim servisima omogućili otvaranje više datoteka, možete promijeniti ograničenja na razini cijelog Linux OS-a. Da bi nove postavke stalno radile i ne bi se mogle resetirati nakon ponovnog pokretanja poslužitelja ili sesije, morate popraviti /etc/security/limits.conf datoteku. Dodajte retke:
* tvrdi nofile 97816 * soft nofile 97816
Ako koristite Ubuntu, morate napisati liniju:
potrebna je sesija pam_limits.so
Ovaj parametar dodaje mogućnost učitavanja ograničenja tijekom autorizacije korisnika..
Nakon promjena, ponovno pokrenite terminal i provjerite graničnu vrijednost max_open_files:
[root @ server ~] # ulimit -n
97.816
Povećajte ograničenje deskriptora otvorenih datoteka za jednu uslugu
Možete ograničiti broj deskriptora otvorenih datoteka za određenu uslugu, a ne za cijeli sustav. Uzmite u obzir apache. Da biste promijenili vrijednosti, otvorite servisne postavke putem systemctl: # systemctl edit httpd.service
Dodajte potrebna ograničenja, na primjer:
[Usluga] LimitNOFILE = 16000 LimitNOFILESoft = 16000
Nakon promjene, trebate ažurirati konfiguraciju usluge i ponovo je pokrenuti:
# systemctl ponovno učitavanje demona
# systemctl ponovno pokrenite httpd.service
Da biste provjerili jesu li se vrijednosti promijenile, morate nabaviti PID usluge:
# systemctl status httpd.service
Na primjer, definirali ste uslugu PID 32724:
# mačka / proc / 32724 / ograničenja | grep "Maks. otvaranje datoteka"
Dakle, promijenili ste Max Max vrijednosti datoteka za određenu uslugu.
Povećanje maksimalnog broja otvorenih datoteka za Nginx i Apache
Ako promijenite ograničenje broja otvorenih datoteka za web poslužitelj, morate ispraviti i konfiguracijsku datoteku usluge. Na primjer, za Nginx u konfiguracijskoj datoteci /etc/nginx/nginx.conf, treba registrirati / promijeniti vrijednost u direktivi:
radnika_rlimit_nofile 16000Pri konfiguriranju Nginx-a na teško učitan 8-jezgreni poslužitelj s radničkim vezama 8192 navedite 8192 * 2 * 8 (vCPU) = 131072 u radnika_rlimit_nofile.
Zatim ponovno pokrenite Nginx.
Za apache morate stvoriti direktorij:
# mkdir /lib/systemd/system/httpd.service.d/
Nakon toga stvorite datoteku limit_nofile.conf:
# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf
I dodajte tome:
[Usluga] LimitNOFILE = 16000
Ne zaboravite ponovo pokrenuti httpd uslugu.
Ograničenje najveće datoteke za trenutnu sesiju
Da biste promijenili ograničenja za otvorene datoteke unutar sesije vašeg terminala, pokrenite naredbu:
# ulimit -n 3000
Pri zatvaranju terminala i stvaranju nove sesije, ograničenja se vraćaju početnim vrijednostima navedenim u datoteci /etc/security/limits.conf.
Za promjenu ukupne vrijednosti u sustavu / proc / sys / fs / file-maks, promijenite vrijednost fs.file-max u /etc/sysctl.conf:
fs.file-max = 100000
I primijenite:
# sysctl -p
U ovom smo članku smislili kako riješiti problem s nedovoljnim ograničenjem za deskriptore otvorenih datoteka u Linuxu i ispitali smo nekoliko opcija za promjenu ograničenja na poslužitelju.