Pri práci na silne zaťažených serveroch Linux sa môžu veľmi často vyskytnúť chyby “príliš veľa otvoreného súboruTo znamená, že program otvoril príliš veľa súborov (prečítané deskriptory súborov) a nemôže otvárať nové. V systéme Linux sú obmedzenia „maximálneho počtu otvorených súborov“ predvolene nastavené pre každý proces a používateľa a nie sú príliš vysoké..
V tomto článku sa zameriame na to, ako skontrolovať súčasné obmedzenia počtu otvorených súborov, ako zmeniť toto nastavenie pre celý server, pre jednotlivé služby a pre reláciu..
obsah:
- Chyba: Príliš veľa otvorených súborov a limity počtu otvorených súborov v systéme Linux
- Obmedzte nastavenia pre limity počtu súčasne otvorených súborov v systéme Linux
- Zvýšte limit deskriptorov otvoreného súboru pre jednu službu
- Zvýšenie maximálneho počtu otvorených súborov pre Nginx a Apache
- Limity maximálneho súboru pre aktuálnu reláciu
Chyba: Príliš veľa otvorených súborov a limity počtu otvorených súborov v systéme Linux
Najprv zistime, kde môžeme pozorovať chybu „príliš veľa otvorených súborov“. Táto chyba sa najčastejšie vyskytuje na serveroch s nainštalovanými webovými servermi NGINX / httpd, databázovým serverom (MySQL / MariaDB / PostgreSQL), keď čítate veľké množstvo protokolov. Napríklad, ak webový server Nginx nemá dostatočný limit na otváranie súborov, zobrazí sa chyba:
socket () zlyhal (24: Príliš veľa otvorených súborov) počas pripájania k prúdu
Maximálny počet deskriptorov súborov, ktoré sa dajú otvoriť vo vašom systéme, je nasledovný:
# cat / proc / sys / fs / file-max
Limit počtu otvorených súborov pre aktuálneho používateľa je 1024. Môžete skontrolovať toto:
# ulimit -n
Existujú dva typy obmedzení: usilovne a mäkký. Užívateľ môže zmeniť limit pre soft limit (ale soft hodnota nemôže prekročiť tvrdo). Tvrdé obmedzenie je možné zmeniť iba ako privilegovaný používateľ.
Ak chcete zobraziť softvérové obmedzenie, vykonajte:
# ulimit -nS
Výstup tvrdého obmedzenia:
# ulimit -nH
Obmedzte nastavenia pre limity počtu súčasne otvorených súborov v systéme Linux
Ak chcete povoliť všetkým službám otvárať viac súborov, môžete zmeniť limity na úrovni celého operačného systému Linux. Aby nové nastavenia fungovali nepretržite a aby sa po reštarte servera alebo relácie neobnovovali, musíte opraviť súbor /etc/security/limits.conf. Pridať riadky:
* tvrdý nofile 97816 * mäkký nofile 97816
Ak používate Ubuntu, musíte napísať riadok:
relácia vyžaduje pam_limits.so
Tento parameter pridáva schopnosť načítať obmedzenia počas autorizácie užívateľa..
Po vykonaní zmien reštartujte terminál a skontrolujte limitnú hodnotu max_open_files:
[root @ server ~] # ulimit -n
97816
Zvýšte limit deskriptorov otvoreného súboru pre jednu službu
Môžete zmeniť limit počtu otvorených deskriptorov súborov pre konkrétnu službu, a nie pre celý systém. Ako príklad uvážte apache. Ak chcete zmeniť hodnoty, otvorte nastavenia služby prostredníctvom systemctl: # systemctl edit httpd.service
Pridajte potrebné limity, napríklad:
[Služba] LimitNOFILE = 16000 LimitNOFILESoft = 16000
Po zmene musíte aktualizovať konfiguráciu služby a reštartovať ju:
# systemctl daemon-reload
# systemctl restart httpd.service
Ak chcete skontrolovať, či sa hodnoty zmenili, musíte získať servisný PID:
# systemctl status httpd.service
Napríklad ste definovali službu PID 32724:
# cat / proc / 32724 / limity grep „Max otvorené súbory“
Takže ste zmenili hodnoty Max otvorených súborov pre konkrétnu službu.
Zvýšenie maximálneho počtu otvorených súborov pre Nginx a Apache
Ak zmeníte limit počtu otvorených súborov pre webový server, musíte tiež opraviť konfiguračný súbor služby. Napríklad pre Nginx v konfiguračnom súbore /etc/nginx/nginx.conf, je potrebné zaregistrovať / zmeniť hodnotu v smernici:
worker_rlimit_nofile 16000Pri konfigurácii Nginx na silne načítanom 8-jadrovom serveri s pracovnými pripojeniami 8192 zadajte 8192 * 2 * 8 (vCPU) = 131072 v súbore worker_rlimit_nofile..
Potom reštartujte Nginx.
Pre apache musíte vytvoriť adresár:
# mkdir /lib/systemd/system/httpd.service.d/
Potom vytvorte súbor limit_nofile.conf:
# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf
A pridať k tomu:
[Služba] LimitNOFILE = 16000
Nezabudnite reštartovať službu httpd.
Limity maximálneho súboru pre aktuálnu reláciu
Ak chcete zmeniť limity otvorených súborov v rámci vašej terminálovej relácie, spustite príkaz:
# ulimit -n 3000
Pri zatváraní terminálu a vytváraní novej relácie sa limity vrátia na počiatočné hodnoty uvedené v súbore /etc/security/limits.conf.
Zmena celkovej hodnoty v systéme / proc / sys / fs / file-max, zmeňte hodnotu fs.file-max v /etc/sysctl.conf:
fs.file-max = 100000
A platí:
# sysctl -p
V tomto článku sme prišli na to, ako vyriešiť problém s nedostatočným limitom pre otvorené deskriptory súborov v systéme Linux a preskúmali sme niekoľko možností zmeny limitov na serveri..