На серверах Alfresco периодически можно наблюдать ошибку “открыто слишком много файлов” (в английской версии: Too many open files). В главном журнале событий - файле catalina.out указанная ошибка может выглядеть следующим образом:

1
2
3
SEVERE: Socket accept failed
 java.net.SocketException: Too many open files
  at java.net.PlainSocketImpl.socketAccept(Native Method)at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)

Ошибка приводит к невозможности создания новых документов в СЭД Alfresco и появлению разных других ошибок при доступе к ресурсам системы.

Для устранения ошибки мы выполним ряд простых шагов.

1. Установим мягкое и жесткое ограничения на открытие файлов для учетной записи, которая используется для запуска Alfresco:

1
2
echo "alfresco  soft  nofile  8192" | sudo tee -a /etc/security/limits.conf
echo "alfresco  hard  nofile  65536" | sudo tee -a /etc/security/limits.conf

Кстати, первое число, при желании, можно также установить 65536.

2. выполнима настройку системы PAM, подключив необходимый модуль.

1
2
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session-noninteractive

pam_limits.so: накладывает ограничения на пользователей и группы, в соответствии с файлом /etc/security/limits.conf.


Далее как в тома анекдоте: “если и это не помогло…”.

В ход идет тяжелая артиллерия, а именно утилита unlim.

ulimit – устанавливает ограничения текущего процесса, например количество одновременно открытых файлов.

Для общей информации можно посмотреть количество файлов, открытие которых изначально установленно системой. Для этого нужно выполнить команду:

cat /proc/sys/fs/file-max

Чтобы увидеть реально число разрешенных к отрытию файлов используем команду:

ulimit -a

Результат может быть примерно следующим:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 124612
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 16384
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 124612
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Теперь, для увеличения числа открытых файлов воспользуемся командой:

ulimit -n 65536

Теперь делаем повторный запрос числа октрых файлов:

ulimit -a

И видим вот такой результат:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 124612
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 124612
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Что особенно хорошо, так это то, что перезагрузка сервера или самой Alfresco не требуется. СЭД Alfresco тут же продолжает работу в штатном режиме. Необходимо лишь перезагрузить веб-страницу и ошибка исчезает.


6th Июл 2017
Теги:
Загрузка Все права защищены © 2017 ИТ-Инженер (Краснодар)
 
把手拿回