Добрый день!!!Вознила проблема. На Linux dedicated сервере работает скрипт PHP, предназначенный для upload/download файлов. При этом трафик больший. Ситуация такая, что вся память и своп очень быстро заканчиваются и систему приходится перегружать по нескольку раз в день. Памяти 1Gb. файлы лежат в файловой системе, но отдаются через PHP скрипт, при этом заносится статистика обращений в базу MySQL. При чем разрешено заливать и скачивать большие файлы. Сейчас лежит около 100 файлов с размером от 100Mb до 500Mb.
вот кусок httpd.conf который я пытался менять с целью увеличения производительности:
Timeout 30
RLimitMEM 20000000 20000000
RLimitNPROC 40 40KeepAlive On
#MaxKeepAliveRequests 500
MaxKeepAliveRequests 10KeepAliveTimeout 5
MinSpareServers 5
#MaxSpareServers 20
MaxSpareServers 10StartServers 8
#MaxClients 450
MaxClients 40#MaxRequestsPerChild 1000
MaxRequestsPerChild 10Вот что показывает top после менее чем 10 минут!! работы сервера:
top - 08:57:44 up 9 min, 1 user, load average: 0.24, 0.23, 0.12
Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 11.9% us, 2.5% sy, 0.0% ni, 73.3% id, 10.0% wa, 1.5% hi, 0.8% si
Mem: 1027736k total, 606348k used, 421388k free, 10968k buffers
Swap: 1015800k total, 0k used, 1015800k free, 388192k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 16 0 3156 552 472 S 0.0 0.1 0:00.57 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 events/0
4 root 7 -10 0 0 0 S 0.0 0.0 0:00.00 khelper
5 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid
18 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0
19 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd
28 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
29 root 15 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
31 root 10 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0
30 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
105 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod
174 root 6 -10 0 0 0 S 0.0 0.0 0:00.00 kmirrord/0
182 root 15 0 0 0 0 S 0.0 0.0 0:00.04 kjournald
1011 root 6 -10 2828 448 376 S 0.0 0.0 0:00.00 udevd
1265 root 19 0 0 0 0 S 0.0 0.0 0:00.00 kjournald
1773 root 16 0 2780 592 500 S 0.0 0.1 0:00.02 syslogd
1777 root 16 0 3204 472 404 S 0.0 0.0 0:00.00 klogd
1815 root 16 0 6032 1204 952 S 0.0 0.1 0:00.00 rpc.idmapd
1879 root 20 0 3724 816 608 S 0.0 0.1 0:00.00 smartd
1888 root 18 0 2400 552 480 S 0.0 0.1 0:00.00 acpid
1948 root 16 0 5108 1664 1376 S 0.0 0.2 0:00.15 sshd
1961 root 15 0 2868 832 700 S 0.0 0.1 0:00.00 xinetd
1970 root 16 0 1192 276 236 S 0.0 0.0 0:00.00 da-popb4smtp
1979 nobody 20 0 6308 1072 884 S 0.0 0.1 0:00.37 directadmin
2019 nobody 20 0 6308 1068 880 S 0.0 0.1 0:00.00 directadmin
2020 nobody 20 0 6308 1072 884 S 0.0 0.1 0:00.00 directadmin
2021 nobody 20 0 6308 1072 884 S 0.0 0.1 0:00.00 directadmin
2022 nobody 20 0 6308 1072 884 S 0.0 0.1 0:00.00 directadmin
2023 nobody 20 0 6308 1072 884 S 0.0 0.1 0:00.00 directadmin
2024 mail 15 0 7648 1932 1560 S 0.0 0.2 0:00.00 exim
2034 root 15 0 3188 532 460 S 0.0 0.1 0:00.00 gpm
2052 root 16 0 22324 13m 9744 S 0.0 1.3 0:00.18 httpd
2061 ftp 16 0 3112 1204 824 S 0.0 0.1 0:00.00 proftpd
2071 root 25 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2072 root 18 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2073 root 18 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2076 root 23 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2077 root 23 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2078 root 23 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2079 root 23 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2080 root 23 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2081 root 23 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2082 root 25 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2083 root 25 0 3656 564 484 S 0.0 0.1 0:00.00 vm-pop3d
2095 apache 16 0 131m 24m 20m S 0.0 2.5 0:00.10 httpd
2096 apache 16 0 68704 33m 28m S 0.0 3.3 0:01.26 httpd
2097 apache 15 0 41408 32m 9892 S 0.0 3.2 0:02.45 httpd
2099 apache 15 0 68704 47m 42m S 0.0 4.7 0:02.45 httpd
2100 root 16 0 4988 812 704 S 0.0 0.1 0:00.00 crond
2117 daemon 16 0 2372 652 564 S 0.0 0.1 0:00.00 atd
2127 dbus 16 0 3180 1196 1068 S 0.0 0.1 0:00.01 dbus-daemon-1
2136 root 16 0 6952 4156 1608 S 0.0 0.4 0:00.19 hald
2148 root 19 0 5420 1220 1060 S 0.0 0.1 0:00.02 mysqld_safe
2188 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.03 mysqld
2225 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.00 mysqld
2226 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.00 mysqld
2233 root 18 0 2740 408 352 S 0.0 0.0 0:00.00 mingetty
2234 root 19 0 1588 408 352 S 0.0 0.0 0:00.00 mingetty
2235 root 19 0 2628 408 352 S 0.0 0.0 0:00.00 mingetty
2236 root 20 0 2100 408 352 S 0.0 0.0 0:00.00 mingetty
2237 root 18 0 3252 408 352 S 0.0 0.0 0:00.00 mingetty
2238 root 18 0 3236 408 352 S 0.0 0.0 0:00.00 mingetty
2360 apache 15 0 68704 50m 46m S 0.0 5.0 0:01.34 httpd
2564 mysql 17 0 58040 6416 1672 S 0.0 0.6 0:00.23 mysqld
2572 mysql 17 0 58040 6416 1672 S 0.0 0.6 0:00.09 mysqld
2573 apache 16 0 59608 14m 10m S 0.0 1.4 0:01.16 httpd
2577 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.14 mysqld
2595 named 18 0 37204 3044 2188 S 0.0 0.3 0:00.00 named
2603 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.06 mysqld
2605 mysql 15 0 58040 6416 1672 S 0.0 0.6 0:00.14 mysqld
2606 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.09 mysqld
2607 apache 16 0 81288 24m 10m S 0.0 2.4 0:02.26 httpd
2608 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.13 mysqld
2609 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.09 mysqld
2610 apache 16 0 71292 14m 10m S 0.0 1.4 0:00.00 httpd
2612 apache 15 0 143m 47m 25m S 0.0 4.8 0:04.77 httpd
2613 apache 15 0 68356 45m 41m S 0.0 4.5 0:00.19 httpd
2624 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.07 mysqld
2625 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.11 mysqld
2626 mysql 16 0 58040 6416 1672 S 0.0 0.6 0:00.08 mysqld
2628 apache 15 0 49480 37m 14m S 0.0 3.7 0:03.45 httpd
2629 apache 16 0 71288 14m 10m S 0.0 1.4 0:00.00 httpd
2630 mysql 15 0 58040 6416 1672 S 0.0 0.6 0:00.09 mysqld
2631 mysql 15 0 58040 6416 1672 S 0.0 0.6 0:00.12 mysqld
2632 apache 15 0 68592 56m 52m S 0.0 5.7 0:00.27 httpd
2633 mysql 15 0 58040 6416 1672 S 0.0 0.6 0:00.11 mysqld
2634 apache 15 0 312m 160m 155m S 0.0 16.0 0:02.11 httpd
2635 mysql 17 0 58040 6416 1672 S 0.0 0.6 0:00.10 mysqld
2636 apache 15 0 29692 18m 13m S 0.0 1.8 0:01.19 httpd
2640 mysql 17 0 58040 6416 1672 S 0.0 0.6 0:00.15 mysqld
2641 apache 16 0 87304 40m 18m S 0.0 4.1 0:01.27 httpd
2650 apache 16 0 68356 31m 27m S 0.0 3.1 0:00.08 httpd
2655 apache 16 0 22488 13m 9904 S 0.0 1.4 0:03.52 httpd
2656 apache 24 0 41400 32m 9860 S 0.0 3.2 0:00.91 httpd
2662 apache 15 0 47560 36m 13m S 0.0 3.6 0:02.34 httpd
2664 apache 15 0 68364 32m 28m S 0.0 3.2 0:00.09 httpd
2666 apache 15 0 22328 13m 9804 S 0.0 1.3 0:00.23 httpd
2671 apache 15 0 68356 21m 16m S 0.0 2.1 0:00.06 httpd
2672 apache 15 0 87408 48m 25m R 0.0 4.8 0:02.36 httpd
2674 apache 15 0 68356 27m 23m S 0.0 2.7 0:00.08 httpd
2675 apache 15 0 68704 16m 11m S 0.0 1.6 0:03.49 httpd
2676 apache 16 0 26692 13m 9m S 0.0 1.4 0:00.01 httpd
2677 apache 16 0 68356 17m 13m S 0.0 1.7 0:00.02 httpd
2682 apache 15 0 22456 13m 9872 S 0.0 1.4 0:00.22 httpd
2692 apache 15 0 472m 18m 14m S 0.0 1.9 0:01.20 httpd
2699 root 15 0 8112 2204 1792 S 0.0 0.2 0:00.04 sshd
2701 root 17 0 4588 1432 1160 S 0.0 0.1 0:00.01 bash
2733 apache 16 0 22804 14m 9900 S 0.0 1.4 0:02.32 httpd
2739 apache 15 0 22804 14m 9884 S 0.0 1.4 0:02.33 httpd
2740 apache 16 0 22408 13m 9848 S 0.0 1.4 0:00.00 httpd
2744 apache 16 0 22324 13m 9752 S 0.0 1.3 0:00.00 httpd
2745 apache 15 0 2536 856 660 R 0.0 0.1 0:00.00 top
Подскажите пожалуйста пути решения данной проблемы.
Спасибо.
ИМХО, надо на Апачу а скрипт оптимизировать
>ИМХО, надо на Апачу а скрипт оптимизироватьСпасибо за ответ.
Вот скрипт по отдаче файле в клиенту:
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
$query = "select name from ezu_files where upload = $fid";if($result = mysql_db_query($dbname, $query, $conn))
{
if($row = mysql_fetch_array($result))
{
$filename = $row["name"];
$time=time();
$query = "update ezu_files set downloaded=$time where upload=$fid";
mysql_db_query($dbname, $query, $conn);header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: ".$xtype);
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=".$filename.";");
readfile($file_path."/".$filename);
}
}
mysql_close();
?>
Что-то я плохо понимаю что тут оптимизировать. Разве что выбросить его из цепочти доступа к файлу. Т.е. давать скачивать файл напрямую, но этого делать не хотелось бы.
>>ИМХО, надо на Апачу а скрипт оптимизировать
>
>Спасибо за ответ.
>
>Вот скрипт по отдаче файле в клиенту:
>
>$conn = mysql_connect($dbhost, $dbuser, $dbpass);
>$query = "select name from ezu_files where upload = $fid";
>
>if($result = mysql_db_query($dbname, $query, $conn))
>{
> if($row = mysql_fetch_array($result))
> {
> $filename = $row["name"];
> $time=time();
> $query = "update ezu_files set downloaded=$time where
>upload=$fid";
> mysql_db_query($dbname, $query, $conn);
>
> header("Content-Transfer-Encoding: binary");
> header("Expires: 0");
> header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
> header("Content-Type: ".$xtype);
> header("Accept-Ranges: bytes");
> header("Content-Disposition: attachment; filename=".$filename.";");
> readfile($file_path."/".$filename);
> }
>}
>mysql_close();
>?>
>
>
>Что-то я плохо понимаю что тут оптимизировать. Разве что выбросить его
>из цепочти доступа к файлу. Т.е. давать скачивать файл напрямую, но
>этого делать не хотелось бы.
попробуйте заменить функцию readfile
глядите на коментаррии пользователей по ссылке http://ru2.php.net/readfile
А ядро у тебя часом не 2.6.9-22.0.1.EL? :)
>А ядро у тебя часом не 2.6.9-22.0.1.EL? :)У меня 2.6.9-11.EL
я что такого с 2.6.9-22.0.1.EL?
>>А ядро у тебя часом не 2.6.9-22.0.1.EL? :)
>
>У меня 2.6.9-11.EL
>
>я что такого с 2.6.9-22.0.1.EL?Да кривое оно. 22 которое, 11 нормально пашет, но тут видимо не в том проблема.
`top` лучше покажи не через 10 минут после ребута, а за 10 минут до него. ;) Там гораздо информативнее.А вообще - настрой перед Апачем nginx и выдачу скриптом заголовка X-Accel-Redirect после авторизации. И о проблеме вероятно можно будет забыть.