Добавил для дебага в /usr/local/etc/rc.d/squid:
squid_prestart()
{
sleep 5
set -x
limits -a >> /tmp/res.txt
sysctl kern.maxfilesperproc >> /tmp/res.txt
set +x
Ребут.
В /var/log/squid/cache.log:
2014/12/03 13:41:21 kid1| Set Current Directory to /var/log/squid
2014/12/03 13:41:21 kid1| Starting Squid Cache version 3.4.9 for
amd64-portbld-freebsd10.1...
2014/12/03 13:41:21 kid1| Process ID 1317
2014/12/03 13:41:21 kid1| Process Roles: worker
2014/12/03 13:41:21 kid1| With 28737 file descriptors available
...
При этом в /tmp/res.txt:
Resource limits (current):
cputime infinity secs
filesize infinity kB
datasize 33554432 kB
stacksize 524288 kB
coredumpsize infinity kB
memoryuse infinity kB
memorylocked 131072 kB
maxprocesses 5749
openfiles 28737
sbsize infinity bytes
vmemoryuse infinity kB
pseudo-terminals infinity
swapuse infinity kB
kern.maxfilesperproc: 100000
Вот все, что менялось.
/boot/loader.conf
zfs_load="YES"
autoboot_delay="2"
ipfw_load="YES"
net.inet.ip.fw.default_to_accept="1"
accf_http_load="YES"
/etc/sysctl.conf
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5
kern.maxfilesperproc=100000
kern.maxfiles=130000
При загрузке системы имеем "limits -a":
openfiles 28737
А после загрузки от рута "limits -a":
openfiles 100000
В /etc/login.conf классы default и daemon не менял.
https://www.freebsd.org/doc/handbook/security-resourcelimits.html
"Processes started at system startup by /etc/rc are assigned to the daemon
login class."
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf
Of Golub Mikhail
Sent: Wednesday, December 03, 2014 1:06 PM
To: [email protected]
Subject: RE: [freebsd] squid: kern.maxfilesperproc
Удалил из /etc/sysctl.conf, прописал лимиты в /boot/loader.conf - не помогло.
Еще заметил, что сквид вылетает при загрузке системы, потом запускается.
Причина вылетания - не может установить соединение с MySQL, хотя запускается он
ПОСЛЕ мускула.
А у сквида есть внешние хелперы, которые работают с SQL.
Решил добавлением паузы в пять секунд в стартовый скрипт сквида.
Теперь сквид стартует чисто при запуске системы, с первого раза, без ошибок.
Но всеравно с "file descriptors available" меньше заданного через sysctl.conf
(или /boot/loader.conf, пробовал оба варианта).
По поводу http://nginx.org/r/worker_rlimit_nofile - похоже на то.
Но у сквида нет такого параметра.
Есть max_filedescriptors - но если в системе меньше их, чем я хочу взять, то
"до лампочки" указание этой опции в конфиге.
Да и этот параметр используется для уменьшения "аппетита" сквида к дескрипторам.
# TAG: max_filedescriptors
# Reduce the maximum number of filedescriptors supported below
# the usual operating system defaults.
#
# Remove from squid.conf to inherit the current ulimit setting.
Попробую вариант отладки, предложенный Anton Yuzhaninov.
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf
Of Lystopad Aleksandr
Sent: Wednesday, December 03, 2014 12:41 PM
To: [email protected]
Subject: Re: [freebsd] squid: kern.maxfilesperproc
Hello, Golub Mikhail!
On Wed, Dec 03, 2014 at 12:26:58PM +0200
[email protected] wrote about "[freebsd] squid: kern.maxfilesperproc":
> Доброго времени суток.
>
> Еще один вопрос, который решаю перезапуском сквида. Но это не правильно :)
>
> Мне мало дескрипторов, с которыми сквид запускается при старте системы
> (именно после перезагрузки сервера).
>
> В /etc/sysctl.conf указано:
> kern.maxfilesperproc=100000
Попробуйте это указать в /boot/loader.conf -- возможно это решение.
--
Lystopad Aleksandr