20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
1

Резкое повышение потребления оперативной памяти при скачивании файла с сервера

04.10.2012, 17:39. Показов 6248. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Вообщем сабж. Проблема возникает, когда пользователь скачивает с сайта любой файл, при этом происходит резкое повышение потребления оперативной памяти (примерно +2-3 ГБ на каждый файл, при условии, что сам файл весит 1.5+ ГБ). В процессах при этой ситуации видна работа nginx, тобишь он старательно обрабатывает эту ситуацию (возможно, так и должно быть). Как с этим бороться? Если с сайта будут скачиваться файлы в большом объеме (30+ файлов весом 1.5+ ГБ), то это 2.5*30 = 75 ГБ оперативной памяти, что, согласитесь, невообразимо.
Есть догадка, что виноват в этом не nginx, а плохо настроен сервер, но в процессах больше всего выделяется именно он.
Есть ли реальный способ оптимизировать процесс скачивания файлов с сайта?
Прошу подсказать в какую сторону копать =)
ОС Debian 6 x64, web-сервер - связка Apache(backend) + nginx (frontend).
Также, думаю, важно отметить, что при одновременном обращении к серверу в качестве загрузки страниц сайта в количестве 450-500 шт. выделяемая под них оперативная память не уходит выше, чем за 80 мб. Заранее спасибо за ответы=)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2012, 17:39
Ответы с готовыми решениями:

Мониторинг потребления оперативной памяти
Доброго времени суток. Помогите пожалуйста написать скрипт на powershell. Необходимо при...

Повышение оперативной памяти
Очеь странная проблема в общем вот скрин когда запущен браузер Но когда начинаешь менять...

Повышение оперативной памяти
Всем привет. У меня сейчас стоит 2 планки оперативки по 1 гб . Материнка вот такая . Процессор...

Повышение максимального количества оперативной памяти ddr3
Всем привет, хотел попросить помощи. Проблема такова, не включается пк с новой оперативной памятью...

31
887 / 353 / 1
Регистрация: 12.08.2012
Сообщений: 4,401
Записей в блоге: 5
05.10.2012, 18:07 21
Author24 — интернет-сервис помощи студентам
IIARTEMII, Вы сейчас на стандартном конфиге? Какой у вас домен? На каком порту Apache? Это всё важно!!!
0
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
05.10.2012, 18:33  [ТС] 22
Допустим, домен example.com, порт apache 8080. На сайте есть ссылка на скачивание файла. Пользователь кликает по ссылке и ему открывается диалоговое окно для загрузки файла. Сам файл расположен на домене files.example.com. Сразу после открытия диалогового окна записывается строка в лог-файл nginx о GET-запросе на этот файл, а через секунду аналогичная запись идёт в лог apache. После начала скачивания в логах ничего нет, потребление оперативной памяти постепенно увеличивается (по 90-150 МБ в секунду при условии, что настроен nginx, без nginx потребление возрастает мгновенно на +2-3 ГБ). Возможна неверная отдача статики со стороны nginx? Но ведь с сайта всё отдаётся правильно, при высоких обращениях сервер почти не нагружается
0
887 / 353 / 1
Регистрация: 12.08.2012
Сообщений: 4,401
Записей в блоге: 5
05.10.2012, 18:36 23
IIARTEMII, Если файл расположен на другом домене то причём тут nginx?
0
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
05.10.2012, 18:41  [ТС] 24
У apache созданы виртуальные хосты, аналогично и у nginx. При этом всё нормально отображается. Единственная проблема с передачей файла
0
887 / 353 / 1
Регистрация: 12.08.2012
Сообщений: 4,401
Записей в блоге: 5
05.10.2012, 19:02 25
Полный конфиг (специально для вас)
Код
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       example.com:80;
        server_name  example.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /path_to_example.com/;
            index  index.html index.htm index.php;
        }

        # proxy the PHP scripts to Apache listening on example.com:8080
        #
        location ~ \.php$ {
            proxy_pass   http://example.com:8080;
        }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    server {
        listen       files.example.com:80;
        server_name  example.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /path_to_files.example.com/;
        }

}

Вот (для Apache/PHP, уберите тот прокси и установите этот чтобы перестало потреблять):
Код
        location ~ \.php$ {
            proxy_pass   http://example.com:8080;
        }
Конфиг (только локатионы, специально для вас)
Для главного сайта:
Код
        location / {
            root   /path_to_example.com/;
            index  index.html index.htm index.php;
        }
Для файлов:
Код
        location / {
            root   /path_to_files.example.com/;
        }
1
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
05.10.2012, 19:22  [ТС] 26
Спасибо, конечно, но теперь накрылась отдача статики для главного сайта (отображаются только ссылки из кэша браузера), также в главном конфигурационном файле ругается на директиву server {}
Но появились новые догадки как поправить это. Буду на основе Вашего конфига смотреть
0
887 / 353 / 1
Регистрация: 12.08.2012
Сообщений: 4,401
Записей в блоге: 5
05.10.2012, 19:28 27
IIARTEMII, У меня опечатки, вот правильный:
Код
 
#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       example.com:80;
        server_name  example.com;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   /path_to_example.com/;
            index  index.html index.htm index.php;
        }
    }
 
        # proxy the PHP scripts to Apache listening on example.com:8080
        #
        location ~ \.php$ {
            proxy_pass   http://example.com:8080;
        }
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    server {
        listen       files.example.com:80;
        server_name  example.com;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   /path_to_files.example.com/;
        }
    }
 
}
0
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
05.10.2012, 19:32  [ТС] 28
Работает, но потребление ОЗУ не упало. Всё осталось, как и было
Файл полностью загружается в кэш. После скачивания файла кэш не очищается. Если очистить его вручную, то оперативная память значительно освободится, но при повторном скачивании файла всё возвращается в исходное состояние
0
887 / 353 / 1
Регистрация: 12.08.2012
Сообщений: 4,401
Записей в блоге: 5
05.10.2012, 19:36 29
IIARTEMII, Значит уже дело не в nginx'е! А вы проверили что именно потребляет???
0
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
05.10.2012, 19:42  [ТС] 30
nginx загружает оперативную память. Это видно по процессам - при попытке скачивания файла он выходит на первую позицию и начинается рост оперативной памяти... новых процессов не появляется

Добавлено через 1 минуту
Единственное отличие между скачиванием при nginx или apache - это постепенный рост занятой ОЗУ или мгновенный.
0
887 / 353 / 1
Регистрация: 12.08.2012
Сообщений: 4,401
Записей в блоге: 5
05.10.2012, 19:46 31
IIARTEMII, У меня идей нет, подождите WebGraf'а.
0
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
06.10.2012, 00:14  [ТС] 32
Я попробую найти причину в настройках сервера (возможно не хватает скорости жестких дисков или ограничивается что-либо). Отпишусь, если решение будет найдено

Добавлено через 4 часа 24 минуты
Проблему решил. Добавил в конфиг виртуального сервера в раздел server {} две директивы:
directio 512;
output_buffers 1 256k;
Теперь при скачивании файла размером в 1.7 ГБ выделяется 5 мб оперативной памяти
Наверно, нужно ещё подобрать определённые значения для достижения минимальных затрат, хотя лично меня и такие устраивают =)
0
06.10.2012, 00:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2012, 00:14
Помогаю со студенческими работами здесь

резкое повышение цп
после перезагрузки повысилось цп до 50-70% и не спадает. почистил реестр. автозагрузку проверил...

Какой должен быть размер файла подкачки при оперативной памяти 2 Гб?
Какой должен быть размер файла подкачки при оперативн. помяти 2 Гб. Проц:2.6 Ггц.

Наиболее быстрый способ сортировки файла в 1 Тб при ограниченном объёме оперативной памяти
Привет! Какой есть наиболее быстрый способ сортировки файла, содержащего int-ы (по одному int-у на...

Как бороться с увеличением объема потребляемой оперативной памяти при сохранении файла Excel без закрытия?
Привет Всем! Вопрос такой, в программе написанной на VBA Ecxel я заметил такую штуку, при каждом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru