The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Gentoo Linux: винт тормозит"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Gentoo Linux: винт тормозит"  
Сообщение от pentarh email(??) on 05-Дек-07, 23:24 
В общем, есть файловый хост с антилич системой. Собственно, всю нагрузку дают вот такие строки кода пхп:
==============
$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? Я в непонятках. Я хорошо знаю фрю, плохо линукс, может чего подтюнить надо?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Gentoo Linux: винт тормозит"  
Сообщение от anonymous (??) on 06-Дек-07, 05:47 
>Так вот в чем вопрос. 40 мбит это же пустяк. SATA винты
>во FreeBSD дают 70-100 без проблем на подобной нагрузке. Почему линукс
>умирает после 40? Я в непонятках. Я хорошо знаю фрю, плохо
>линукс, может чего подтюнить надо?

ИМХО потому что PHP.  Перепишите этот маленький кусок на Си с использованием sendfile()

Приблизительный план:
PHP скрипт пусть проверяет всё, что хочет, после чего записывает некоторый "ключ" (строку случайных данных) в базу данных.  После чего перенаправляет на этот будущий CGI на C.  Перенаправляет, передавая ему в POST те самые случайные данные.  CGI на C пусть просто проверяет, что эти данные есть в базе и всё, сразу начинает отдавать файл.  Таким образом на Си придётся переписывать как можно меньше -- строк 100 где-то.

В принципе, сначала можно поиграться с: http://ua.php.net/manual/en/function.readfile.php или http://ua.php.net/manual/en/function.http-send-file.php

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Gentoo Linux: винт тормозит"  
Сообщение от Den (??) on 06-Дек-07, 10:53 
>[оверквотинг удален]
>Приблизительный план:
>PHP скрипт пусть проверяет всё, что хочет, после чего записывает некоторый "ключ"
>(строку случайных данных) в базу данных.  После чего перенаправляет на
>этот будущий CGI на C.  Перенаправляет, передавая ему в POST
>те самые случайные данные.  CGI на C пусть просто проверяет,
>что эти данные есть в базе и всё, сразу начинает отдавать
>файл.  Таким образом на Си придётся переписывать как можно меньше
>-- строк 100 где-то.
>
>В принципе, сначала можно поиграться с: http://ua.php.net/manual/en/function.readfile.php или http://ua.php.net/manual/en/function.http-send-file.php

потомучто проблема со сказей, может драйвера кривые

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру