20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
|
|
1 | |
Резкое повышение потребления оперативной памяти при скачивании файла с сервера04.10.2012, 17:39. Показов 6248. Ответов 31
Метки нет (Все метки)
Всем доброго времени суток.
Вообщем сабж. Проблема возникает, когда пользователь скачивает с сайта любой файл, при этом происходит резкое повышение потребления оперативной памяти (примерно +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
|
04.10.2012, 17:39 | |
Ответы с готовыми решениями:
31
Мониторинг потребления оперативной памяти Повышение оперативной памяти Повышение оперативной памяти Повышение максимального количества оперативной памяти ddr3 |
05.10.2012, 18:07 | 21 |
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
|
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
|
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
|
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
|
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
|
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 | |
06.10.2012, 00:14 | |
Помогаю со студенческими работами здесь
32
резкое повышение цп Какой должен быть размер файла подкачки при оперативной памяти 2 Гб? Наиболее быстрый способ сортировки файла в 1 Тб при ограниченном объёме оперативной памяти Как бороться с увеличением объема потребляемой оперативной памяти при сохранении файла Excel без закрытия? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |