Найти - Пользователи
Полная версия: Не получается завести больше 2-х сайтов с помощью Pyramid + Gunicorn + Nginx
Начало » Pyramid / Pylons / TurboGears » Не получается завести больше 2-х сайтов с помощью Pyramid + Gunicorn + Nginx
1
KrokodilGena
Всем привет!

У меня есть VPS на котором я развернул пока что 2 поекта, используя Pyramid 1.4.5 + Gunicorn + Nginx. Python я поставил в окружение (environment) и все остальные модули туда же. Но вот я хотел добавить третий и увидел ряд непонятных ошибок при попытке запустить очередной раз Pserve:

$ pserve production.ini --reload --log-file=domain3.ru-pserve.log
Starting subprocess with file monitor
Traceback (most recent call last):
  File "/var/www/eba/data/gs/env/bin/pserve", line 9, in <module>
    load_entry_point('pyramid==1.4.5', 'console_scripts', 'pserve')()
  File "/var/www/eba/data/gs/env/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/var/www/eba/data/gs/env/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/var/www/eba/data/gs/env/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/var/www/eba/data/gs/env/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 28, in <module>
    from pyramid.compat import WIN
  File "/var/www/eba/data/gs/env/lib/python2.7/site-packages/pyramid/compat.py", line 114, in <module>
    from urllib2 import urlopen as url_open
  File "/var/www/eba/data/gs/env/opt/Python-2.7.3/lib/python2.7/urllib2.py", line 94, in <module>
    import httplib
  File "/var/www/eba/data/gs/env/opt/Python-2.7.3/lib/python2.7/httplib.py", line 69, in <module>
    from array import array
ImportError: /var/www/eba/data/gs/env/lib/python2.7/lib-dynload/array.so: cannot open shared object file: Too many open files in system

Для предыдущих доменов я запускал Pserve с флагом –daemon, и они отлично висят в процессах не падая. Самое интересное, что если запустить ту же команду 2-й и 3-й раз, то получаю разные ошибки:
File "/var/www/eba/data/gs/env/opt/Python-2.7.3/lib/python2.7/random.py", line 70, in <module>
    import _random
ImportError: /var/www/eba/data/gs/env/lib/python2.7/lib-dynload/_random.so: cannot open shared object file: Too many open files in system

и вот такая:
File "/var/www/eba/data/gs/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 3, in <module>
    from __future__ import with_statement
ImportError: No module named __future__

Тоесть каждый раз ему не хватает какого то модуля, либо открыто слишком много каких то там файлов. Посещалка на обоих сайтах 0 человек в сутки. Точнее захожу только я.

Вот пример конфига Nginx для первого домена:
# $ cat cat /etc/nginx/sites-available/domain1.ru
upstream domain1.ru {
    server 0.0.0.0:5000;
    server 0.0.0.0:5001;
}
server {
    listen 80;
    server_name www.domain1.ru domain1.ru;
    error_log  /var/log/nginx/domain1.ru.error.log;
    access_log  /var/log/nginx/domain1.ru.access.log;
    location / {
        try_files $uri @proxy_to_app;
    }
    location @proxy_to_app {
        proxy_set_header        Host $http_host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
        client_max_body_size    10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout   60s;
        proxy_send_timeout      90s;
        proxy_read_timeout      90s;
        proxy_buffering         off;
        proxy_temp_file_write_size 64k;
        proxy_pass      http://127.0.0.1:5000;
        proxy_redirect          off;
    }
}

и кусок из production.ini:
mongo_uri = mongodb://localhost:27017/domain1
[server:main]
use = egg:gunicorn
host = 0.0.0.0
port = 5000
workers = 1
worder_class = gevent

Тоесть, как я понял Nginx слушает 80 порт и проксирует на 5000 к Gunicorn, а дальше он каким то чудесным образом общается с Pyramid. Почему там вначале два порта точно не знаю. Для второго домена соответственно я использовал такой же конфиг, только порты 5010 и 5011, для 3го - 5015 и 5016. Все эти порты свободны и я не понимаю в чем дело. Pserve просто не запускается и все, выдает каждый раз разные ошибки.

Я потом подумал о том, что для каждого домена нужно свое окружение, но это ведь бред, так как мое окружение сейчас весит 150Мб, а файлы необходимые для сайта пару сотен килобайт.
appetito
а покажи production.ini
KrokodilGena
appetito
а покажи production.ini
пока я пытался открыть vim-ом файл, чтобы скопировать вам, увидел вот что:
~# vim ~/domain/production.ini
vim: error while loading shared libraries: libgpm.so.2: cannot open shared object file: Error 23

набрал ls -al:
-bash: start_pipeline: pgrp pipe: Too many open files in system

В общем похоже Pyramid здесь не при чем, у меня что-то с сервером не так. Но что именно я пока не знаю. Я понятия не имею откуда может быть столько открытых файлов.
KrokodilGena
В общем не хватало оперативки. У меня был самый дешевый тариф где 512Мб, короче mongo, nginx, pserve и mod-fpm получается жрут немало. Пришлось врубить тариф 1024Мб и пока хватает. Всем спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB