Добавил для дебага в /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 

Ответить