Skip to content


tinyproxy: Could not allocate memory for child counting

tinyproxy - это маленький и не требовательный к ресурсам HTTP/SSL-прокси-сервер. Его целесообразно применять там, где не хочется ставить что-то более навороченное, типа squid-а.

Заметил я однажды на одном из серверов, что tinyproxy не взлетает, ругаясь в свой лог-файл /var/log/tinyproxy/tinyproxy.log таким вот образом:

INFO   Feb 16 10:40:57 [25015]: Now running as group "tinyproxy".
INFO   Feb 16 10:40:57 [25015]: Now running as user "tinyproxy".
ERROR  Feb 16 10:40:57 [25015]: Could not allocate memory for child counting.

Само собой, сразу полез проверять что с памятью, но свободной памяти оказалось предостаточно. На всякий случай остановил даже тяжелые по памяти процессы, съедающие обычно по нескольку гигабайт RSS --- безрезультатно, ошибка никуда не делась.

Запустив tinyproxy через strace, я увидел следующее:

munmap(0x2b2ae6a30000, 4096)            = 0
umask(0177)                             = 0177
gettimeofday({1329484731, 868249}, NULL) = 0
getpid()                                = 13041
open("/tmp/tinyproxy.shared.P0QttN", O_RDWR|O_CREAT|O_EXCL, 0600) = 3
unlink("/tmp/tinyproxy.shared.P0QttN")  = 0
ftruncate(3, 40)                        = 0
mmap(NULL, 40, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0x2b2ae6a30000
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2b2ae6a3ce40) = 13042
--- SIGCHLD (Child exited) @ 0 (0) ---
exit_group(0)                           = ?

Эта попытка создать файл в директории /tmp навела меня на мысль проверить права доступа к ней. Оказалось, что права там нестандартные:

[avz@ds1 /tmp]# ls -ld /tmp
lrwxrwxrwx 1 root root 24 Апр 10  2009 /tmp -> /mnt/disk2/tmp/
[avz@ds1 /tmp]# ls -ld /mnt/disk2/tmp
drwxrwxr-x 4 root www 4096 Фев 17 13:18 /mnt/disk2/tmp/

Как видно, отсутствует права на запись для пользователей, не входящих в группу www. А сам tinyproxy как раз должен работать от имени пользователя tinyproxy, который в группу www не входит. После комнады chmod o+w /mnt/disk2/tmp tinyproxy успешно запустился :)

Posted in *nix.

Tagged with .


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Петровский says

    Поставил я этот tinyproxy, а он вообще тупо не запускается. И что с ним делать? strace тоже ситуацию не прояснил.

  2. Петровский says

    Капец. То ли инит-скрипт писал какой-то дятел, то ли rpm-ку tinyproxy-1.8.2-1.el5.rf.i386 из репы rpmforge собирал какой-то ламер криворукий.

    Что пришлось допилить:
    1) вручную создать директорию для логов (вычитал в messages):
    mkdir /var/log/tinyproxy ; chown tinyproxy /var/log/tinyproxy
    2) в инит-скрипте /etc/init.d.tinyproxy заменить строку DAEMON="/usr/bin/tinyproxy" на DAEMON="/usr/sbin/tinyproxy"
    3) переместить конфиг-файл /etc/tinyproxy.conf в /etc/tinyproxy/tinyproxy.conf
    4) создать диру для pid-файла и поправить:
    mkdir /var/run/tinyproxy ; chown tinyproxy /var/run/tinyproxy

You must be logged in to post a comment.