URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 63145
[ Назад ]

Исходное сообщение
"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."

Отправлено Dmitry , 05-Янв-06 11:07 
Добрый день!!!

  Вознила проблема. На Linux dedicated сервере работает скрипт PHP, предназначенный для upload/download файлов. При этом трафик больший. Ситуация такая, что вся память и своп очень быстро заканчиваются и систему приходится перегружать по нескольку раз в день. Памяти 1Gb. файлы лежат в файловой системе, но отдаются через PHP скрипт, при этом заносится статистика обращений в базу MySQL. При чем разрешено заливать и скачивать большие файлы. Сейчас лежит около 100 файлов с размером от 100Mb до 500Mb.

вот кусок httpd.conf который я пытался менять с целью увеличения производительности:

Timeout 30

RLimitMEM 20000000 20000000
RLimitNPROC 40 40

KeepAlive On
#MaxKeepAliveRequests 500
MaxKeepAliveRequests 10

KeepAliveTimeout 5
MinSpareServers 5
#MaxSpareServers 20
MaxSpareServers 10

StartServers 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 cached

  PID 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


Подскажите пожалуйста пути решения данной проблемы.
Спасибо.


Содержание

Сообщения в этом обсуждении
"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."
Отправлено andrey_p , 05-Янв-06 11:17 
ИМХО, надо на Апачу а скрипт оптимизировать

"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."
Отправлено Dmitry , 05-Янв-06 11:25 
>ИМХО, надо на Апачу а скрипт оптимизировать

Спасибо за ответ.

Вот скрипт по отдаче файле в клиенту:

$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();
?>


Что-то я плохо понимаю что тут оптимизировать. Разве что выбросить его  из цепочти доступа к файлу. Т.е. давать скачивать файл напрямую, но этого делать не хотелось бы.


"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."
Отправлено balton , 07-Янв-06 15:53 
>>ИМХО, надо на Апачу а скрипт оптимизировать
>
>Спасибо за ответ.
>
>Вот скрипт по отдаче файле в клиенту:
>
>$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


"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."
Отправлено Alexey , 07-Янв-06 13:36 
А ядро у тебя часом не 2.6.9-22.0.1.EL? :)

"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."
Отправлено Dmitry , 07-Янв-06 13:40 
>А ядро у тебя часом не 2.6.9-22.0.1.EL? :)

У меня 2.6.9-11.EL

я что такого с 2.6.9-22.0.1.EL?


"Оптимизация работы Apache+PHP+MySQL при работе с большими фа..."
Отправлено Алексей , 08-Янв-06 22:52 
>>А ядро у тебя часом не 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 после авторизации. И о проблеме вероятно можно будет забыть.