Sobes.tech
Middle

Какво да правите, ако при работа с nginx възникне грешка при превишаване на 1024 връзки?

sobes.tech AI

Отговор от AI

Това показва ограничение на броя на отворените файлови дескриптори.

Решения:

  1. Увеличете worker_connections в конфигурацията на Nginx:

    // Увеличаване на максималния брой връзки на работен процес
    events {
        worker_connections 4096; // или повече, в зависимост от нуждите и ресурсите
    }
    
  2. Увеличете лимита на отворените файлове на ниво операционна система:

    • За текущата сесия на потребителя:
      # Временно увеличаване на лимита на отворените файлове
      ulimit -n 65536
      
    • За цялата система (постоянно): Редактирайте файла /etc/security/limits.conf. Добавете редове:
      # Специфични лимити за потребителя
      nginx soft nofile 65536
      nginx hard nofile 65536
      
      # Алтернативно, за всички потребители
      # * soft nofile 65536
      # * hard nofile 65536
      
      (Заменете nginx с името на потребителя, под който работи Nginx, ако е различно.) Необходимо е да рестартирате системата или да се логнете отново, за да се приложат промените, или да изпълните sysctl -p.
  3. Проверете глобалните настройки на ядрото: Уверете се, че fs.file-max е достатъчно високо.

    # Проверете текущата стойност
    cat /proc/sys/fs/file-max
    # Задайте нова стойност (временно)
    # sudo sysctl -w fs.file-max=100000
    # Задайте нова стойност (постоянно) - редактирайте `/etc/sysctl.conf`
    # Добавете ред: fs.file-max = 100000
    # Приложете промените
    # sudo sysctl -p
    
  4. Уверете се, че потребителят на Nginx има право да отваря толкова файлове: Проверете под кой потребител работи Nginx и какви лимити са зададени за него. Това е свързано с точка 2.

  5. Рестартирайте Nginx: След направените промени в конфигурацията или системните лимити, трябва да го рестартирате.

    # Презаредете Nginx
    sudo systemctl reload nginx
    # Или, ако не помогне
    # sudo systemctl restart nginx
    

Приоритет при решаването:

  1. Проверете и увеличете worker_connections.
  2. Проверете и увеличете лимитите за файлови дескриптори за потребителя на Nginx.
  3. Проверете и увеличете глобалния лимит fs.file-max.
  4. Рестартирайте Nginx.

Важно е да се помни, че увеличаването на лимитите трябва да е обосновано и да съответства на наличните ресурси на сървъра (памет, CPU). Прекалено високите стойности могат да доведат до нестабилност на системата.