Помогите разобраться, сколько оперативной памяти гарантировано доступно для нас в любое время.
При поступлении от клиента запроса на порт 80 к архивному файлу в 50 мегабайт Апач получает команду загрузить файл с диска в оперативную память. Если наша клиентская эксешка даёт запрос Апачу взять с первого по пятый байт 50-ти мегабайтного файла, то загружается ли 50-ти мегабайтный файл полностью в оперативную память или же в оперативную память Апач кладёт только с первого по пятый байт?
Сколько оперативной памяти нужно будет поставить нам в сервер 1У чтобы 300 юзеров качали онлайн 16 мегабайт из 50-ти мегабайтного файла.
Помогите побороть долбаный Апач.
Спасибо,
с уважением
bogdasha
Apache 2.0 жрёт всю память, валит систему. (300 юзеров онлайн качают 50 метров,)
Модератор: SLEDopit
Re: Apache 2.0 жрёт всю память, валит систему.
Клиент не может обратиться к 5-му или любому другому байту файла через http. Это не smb и не NFS. Единственное, что может клиент - укачать этот файл к себе. А там уж пусть делает с ним все, что захочет.
Rock'n'roll мертв © БГ
Re: Apache 2.0 жрёт всю память, валит систему.
Для Shura:
а мне помнится, что есть в http заголовки, позволяющие качать файл с определенной позиции. скорее всего и скачиваемый диапазон определить можно.
или я, как всегда, не о том?
а мне помнится, что есть в http заголовки, позволяющие качать файл с определенной позиции. скорее всего и скачиваемый диапазон определить можно.
или я, как всегда, не о том?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Apache 2.0 жрёт всю память, валит систему.
(bogdasha @ Четверг, 04 Августа 2005, 21:37) писал(а):При поступлении от клиента запроса на порт 80 к архивному файлу в 50 мегабайт Апач получает команду загрузить файл с диска в оперативную память. Если наша клиентская эксешка даёт запрос Апачу взять с первого по пятый байт 50-ти мегабайтного файла, то загружается ли 50-ти мегабайтный файл полностью в оперативную память или же в оперативную память Апач кладёт только с первого по пятый байт?
Меньше чем 4Kb процессу не выделяют. Если apache попросит замапить 1байт, то ему выделять 4Kb и создадут mapping (cat /proc/pid/maps) опять-таки на 4Kb. Другое дело, если он протсто делает read() из файла.
В каждом из нас спит гений... и с каждым днем все крепче...
Re: Apache 2.0 жрёт всю память, валит систему.
(Sash Kan @ Пятница, 05 Августа 2005, 11:01) писал(а):Для Shura:
а мне помнится, что есть в http заголовки, позволяющие качать файл с определенной позиции. скорее всего и скачиваемый диапазон определить можно.
или я, как всегда, не о том?
есть такое... с какого по какой кусок :-)
Re: Apache 2.0 жрёт всю память, валит систему.
Детализация ворпоса:
Ссылка на странице вида http://domen:80/file.zip
ссылку одновременно кликают 5000 юзеров.
Вопрос:
Сколько оперативной памяти в сервере нужно максимум чтобы Apache 2.0 не загнулся со своим параметром, типа ServerType inetd.
И зачем вообще во второй версии убрали ServerType standalone? Чем они его заменили, кто знает? Максклиентами и всяким хламом? Всеравно ведь каждый запрос на 80-й порт порождает копию Apache в памяти. А если качать в несколько потоков? тут 300 гиг оперативки нехватит под такую гадость.
Встряхните бицепсами, ребят :megalol: кому не лень повісить лишний раз свой рейтинг Гуру.
Ссылка на странице вида http://domen:80/file.zip
ссылку одновременно кликают 5000 юзеров.
Вопрос:
Сколько оперативной памяти в сервере нужно максимум чтобы Apache 2.0 не загнулся со своим параметром, типа ServerType inetd.
И зачем вообще во второй версии убрали ServerType standalone? Чем они его заменили, кто знает? Максклиентами и всяким хламом? Всеравно ведь каждый запрос на 80-й порт порождает копию Apache в памяти. А если качать в несколько потоков? тут 300 гиг оперативки нехватит под такую гадость.
Встряхните бицепсами, ребят :megalol: кому не лень повісить лишний раз свой рейтинг Гуру.
Re: Apache 2.0 жрёт всю память, валит систему.
Для bogdasha:
а почему бы не зайти с другого конца?
есть такой замечательный протокол под названием ftp.
придумывался он именно для того, чтобы файлы можно было с машины качать.
(почти) в любом количестве и (почти) любого размера.
так что, если задача позволяет, может быть имеет смысл переключить внимание с http на более специализированный протокол?
а почему бы не зайти с другого конца?
есть такой замечательный протокол под названием ftp.
придумывался он именно для того, чтобы файлы можно было с машины качать.
(почти) в любом количестве и (почти) любого размера.
так что, если задача позволяет, может быть имеет смысл переключить внимание с http на более специализированный протокол?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Apache 2.0 жрёт всю память, валит систему.
Вопрос решён пока только так, но требует дальнейщей доработки:
Поскольку 2-я апача уже не содержит ServerType standalone и вообще уже не содержит ServerType, то пришлось поменять /etc/rc.d/init.d/httpd из состояния inetd в состояние demon:
bogdasha добавил в 06.08.2005 13:09
Объясните, что менять для 900 юзеров онлайн качающих в 2 потока:
<IfModule prefork.c>
StartServers 2
MinSpareServers 5
MaxSpareServers 20
ServerLimit 900
MaxClients 900
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 900
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers 5
StartThreads 2
MinSpareThreads 1
MaxSpareThreads 2
MaxThreadsPerChild 3
MaxRequestsPerChild 30
</IfModule>
Поскольку 2-я апача уже не содержит ServerType standalone и вообще уже не содержит ServerType, то пришлось поменять /etc/rc.d/init.d/httpd из состояния inetd в состояние demon:
Код: Выделить всё
#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
# check for 1.3 configuration
check13 () {
CONFFILE=/etc/httpd/conf/httpd.conf
GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
GONE="${GONE}AccessConfig|ResourceConfig)"
if LANG=C grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
echo
echo 1>&2 " Apache 1.3 configuration directives found"
echo 1>&2 " please read /usr/share/doc/httpd-2.0.53/migration.html"
failure "Apache 1.3 config directives test"
echo
exit 1
fi
}
# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure. So we just do it the way init scripts
# are expected to behave here.
start() {
echo -n $"Starting $prog: "
check13 || exit 1
LANG=$HTTPD_LANG daemon $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc $httpd -HUP
RETVAL=$?
fi
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ]; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtes
t}"
exit 1
esac
exit $RETVAL
bogdasha добавил в 06.08.2005 13:09
Объясните, что менять для 900 юзеров онлайн качающих в 2 потока:
<IfModule prefork.c>
StartServers 2
MinSpareServers 5
MaxSpareServers 20
ServerLimit 900
MaxClients 900
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 900
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers 5
StartThreads 2
MinSpareThreads 1
MaxSpareThreads 2
MaxThreadsPerChild 3
MaxRequestsPerChild 30
</IfModule>
Re: Apache 2.0 жрёт всю память, валит систему.
(bogdasha @ Суббота, 06 Августа 2005, 12:09) писал(а):пришлось поменять /etc/rc.d/init.d/httpd из состояния inetd в состояние demon
сразу выпал в осадок
потом перечитал тему, оказывается - проглядел я упоминание про inetd
товарищ bogdasha, Вы имеете представление, что такое inetd и что получается, если такую частоиспользуемую (по крайней мере у Вас) программу, как httpd, будет запускать демон inetd?
сам и отвечу - загибаться будет машина. со страшной силой.
не стоит httpd запускать через ж., извините, через inetd
разве что дома или на сайте с двумя посещениями в месяц (включая webmaster'а)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Apache 2.0 жрёт всю память, валит систему.
С этим понятно.
Теперь интересует следующее:
900 юзеров онлайн качают 50-ти метровый файл в 2 потока.
Что нужно изменить в конфигурации Apache 2.0 для того чтобы сервер не орал на меня Cannot allocate memory или Cannot open file, meny files open in system, или ещё Cannot fork new proccess
Что нужно менять в:
<IfModule prefork.c>
StartServers 2
MinSpareServers 5
MaxSpareServers 20
ServerLimit 900
MaxClients 900
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 900
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
#<IfModule perchild.c>
#NumServers 5
#StartThreads 2
#MinSpareThreads 1
#MaxSpareThreads 2
#MaxThreadsPerChild 3
#MaxRequestsPerChild 30
#</IfModule>
Теперь интересует следующее:
900 юзеров онлайн качают 50-ти метровый файл в 2 потока.
Что нужно изменить в конфигурации Apache 2.0 для того чтобы сервер не орал на меня Cannot allocate memory или Cannot open file, meny files open in system, или ещё Cannot fork new proccess
Что нужно менять в:
<IfModule prefork.c>
StartServers 2
MinSpareServers 5
MaxSpareServers 20
ServerLimit 900
MaxClients 900
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 900
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
#<IfModule perchild.c>
#NumServers 5
#StartThreads 2
#MinSpareThreads 1
#MaxSpareThreads 2
#MaxThreadsPerChild 3
#MaxRequestsPerChild 30
#</IfModule>