В общем, есть файловый хост с антилич системой. Собственно, всю нагрузку дают вот такие строки кода пхп:
==============
$fp=@fopen("./storage/".$validdownload[0],'rb');if (is_resource($fp)) {
header('Content-Type: ' . $mime_type.'; charset=utf-8');
header('Content-Length: ' . filesize("./storage/".$validdownload[0]).'; charset=utf-8');
header('Content-Disposition: attachment; ' . header_filename($filename).'; charset=utf-8');
while (!feof($fp)) {
$v=@fread($fp,65535);
echo $v;
unset($v);
}
fclose($fp);
}
==============
Я это дело оптимизировал, чтобы не кушалась память в процессе закачки. Файлы rfxf.ncz большие - десятки и сотни мегабайт. Процессы апача занимают по 4-8 мег в памяти.
Файловый хост вынесен на отдельный префорковый апач и даже на отдельный винчестер.
Вот что показывает топ в пиках закачки:
==============
top - 22:15:23 up 16 days, 3:37, 1 user, load average: 30.98, 32.75, 31.76
Tasks: 265 total, 6 running, 258 sleeping, 0 stopped, 1 zombie
Cpu(s): 41.1% us, 7.5% sy, 0.0% ni, 0.0% id, 46.3% wa, 1.8% hi, 3.3% si
Mem: 2059532k total, 2043412k used, 16120k free, 25708k buffers
Swap: 1959920k total, 1776k used, 1958144k free, 675984k cached
==============
ЛА такие большие вот почему:
==============
# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 48 1776 16500 27420 702936 0 0 1513 96 11 10 27 7 54 11
3 66 1776 16716 27384 699052 0 0 2704 0 3509 2931 59 12 0 29
2 67 1776 16520 27136 701036 0 0 4856 0 3819 2961 42 16 0 42
1 51 1776 16156 27012 702072 0 0 4136 0 3924 2751 32 14 0 54
==============
30..90 процессов постояннно блокированы по IO - iowait процессора от 30%. Совершенно очевидно, что это винчестер, загрузка у него 100%.
Винчестер вот какой:
scsi 0:0:0:0: Direct-Access ATA WDC WD800JD-23LS 07.0 PQ: 0 ANSI: 5
Это SATA 150.
Для того, что сервер не навернулся от закачек, был поставлен mod_cband и общая скорость отдачи ограничена до 40 мбит/сек. Если дать больше, доходит где то до 70 и машина вскоре перестает пинговаться.
Так вот в чем вопрос. 40 мбит это же пустяк. SATA винты во FreeBSD дают 70-100 без проблем на подобной нагрузке. Почему линукс умирает после 40? Я в непонятках. Я хорошо знаю фрю, плохо линукс, может чего подтюнить надо?