Поправљамо грешку „Превише отворених датотека“ у Линуку

Врло често се могу појавити грешке приликом рада на јако учитаним Линук серверима „превише отворене датотекес ". То значи да је програм отворио превише датотека (прочитајте дескрипторе датотека) и не може да отвори нове. У Линуку су ограничења„ макс. отворене датотеке “постављена према заданим поставкама за сваки процес и корисника и нису превисока.

У овом ћемо чланку погледати како провјерити тренутна ограничења броја отворених датотека, како промијенити ову поставку за цијели послужитељ, за појединачне услуге и за сесију..

Садржај:

  • Грешка: Превише отворених датотека и ограничења броја отворених датотека у Линуку
  • Ограничите подешавања за ограничења броја истовремено отворених датотека у Линуку
  • Повећајте ограничење дескриптора отворених датотека за једну услугу
  • Повећање максималног броја отворених датотека за Нгинк и Апацхе
  • Ограничење највећег броја датотека за тренутну сесију

Грешка: Превише отворених датотека и ограничења броја отворених датотека у Линуку

Прво, схватимо где можемо уочити грешку „превише отворених датотека“. Најчешће се ова грешка појављује на серверима са инсталираним веб серверима НГИНКС / хттпд, сервером базе података (МиСКЛ / МариаДБ / ПостгреСКЛ), приликом читања великог броја дневника. На пример, када веб сервер Нгинк нема довољно ограничења за отварање датотека, добићете грешку:

соцкет () није успео (24: Превише отворених датотека) док се повезујете узводно

Максимални број дескриптора датотека који се могу отворити на вашем систему може се наћи на следећи начин:

# цат / проц / сис / фс / филе-мак

Ограничење броја отворених датотека за тренутног корисника је 1024. Ово можете да проверите:

# улимит -н

Постоје две врсте ограничења: Тешко и Софт. Корисник може променити ограничење за софт лимит (али мека вредност не може прећи тврду). Тврдо ограничење може се променити само као привилеговани корисник.

Да бисте приказали софт-ограничење, извршите:

# улимит -нС

Да бисте поставили тврдо ограничење:

# улимит -нХ

Ограничите подешавања за ограничења броја истовремено отворених датотека у Линуку

Да бисте свим сервисима омогућили отварање више датотека, можете променити ограничења на нивоу целог Линук оперативног система. Да би нова подешавања стално радила и не би се могла ресетовати након поновног покретања сервера или сесије, морате да поправите /етц/сецурити/лимитс.цонф датотеку. Додајте линије:

* хард нофиле 97816 * софт нофиле 97816

Ако користите Убунту, морате да напишете линију:

потребна је сесија пам_лимитс.со

Овај параметар додаје могућност учитавања ограничења током ауторизације корисника..

Након промена, поново покрените терминал и проверите граничну вредност мак_опен_филес:

[роот @ сервер ~] # улимит -н

97816

Повећајте ограничење дескриптора отворених датотека за једну услугу

Можете да промените ограничење броја дескриптора отворених датотека за одређену услугу, а не за цео систем. Узмите у обзир апацхе. Да бисте променили вредности, отворите сервисна подешавања путем системцтл: # системцтл уреди хттпд.сервице Додајте потребна ограничења, на пример:

[Сервице] ЛимитНОФИЛЕ = 16000 ЛимитНОФИЛЕСофт = 16000

Након промене морате ажурирати конфигурацију услуге и поново је покренути:

# системцтл поновно учитавање демона
# системцтл поново покрените хттпд.сервице

Да бисте проверили да ли су се вредности промениле, морате да добијете ПИД услуге:

# статусцтл статус хттпд.сервице

На пример, дефинисали сте услугу ПИД 32724:

# мачка / проц / 32724 / ограничења | греп "Макс. отворене датотеке"

Тако сте променили Мак отворене вредности датотека за одређену услугу.

Повећање максималног броја отворених датотека за Нгинк и Апацхе

Ако промените ограничење броја отворених датотека за веб сервер, морате исправити и конфигурациону датотеку услуге. На пример, за Нгинк у конфигурацијској датотеци /етц/нгинк/нгинк.цонф, треба да региструјете / промените вредност у директиви:

Воркинг_рлимит_нофиле 16000
Када конфигуришете Нгинк на тешко учитаном 8-језгреном серверу са радничким везама 8192, наведите 8192 * 2 * 8 (вЦПУ) = 131072 у радника_рлимит_нофиле.

Затим поново покрените Нгинк.

За апацхе морате да креирате директоријум:

# мкдир /либ/системд/систем/хттпд.сервице.д/

Након тога креирајте датотеку лимит_нофиле.цонф:

# нано /либ/системд/систем/хттпд.сервице.д/лимит_нофиле.цонф

И додајте му:

[Сервис] ЛимитНОФИЛЕ = 16000

Не заборавите да поново покренете хттпд услугу.

Ограничење највећег броја датотека за тренутну сесију

Да бисте променили ограничења за отворене датотеке унутар сесије вашег терминала, покрените наредбу:

# улимит -н 3000

При затварању терминала и стварању нове сесије, ограничења се враћају на почетне вредности наведене у датотеци /етц/сецурити/лимитс.цонф.

Да бисте променили укупну вредност у систему / проц / сис / фс / филе-мак, промените вредност фс.филе-мак у /етц/сисцтл.цонф:

фс.филе-мак = 100000

И примените:

# сисцтл -п

У овом смо чланку схватили како да решимо проблем са недовољним ограничењем за дескрипторе отворених датотека у Линуку и испитали смо неколико опција за промену лимита сервера.