powered by simpleCommunicator - 2.0.47     © 2025 Programmizd 02
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Node.js
3 сообщений из 3, страница 1 из 1
Node.js
    #37948605
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени суток.
Вот, к сожалению, пришлось столкнуться с этим чудом. Рассматриваю возможность поднятия на этом сервере LESS. То есть работать он будет предельно просто - при получении пост запроса вычитывает тело (less css), берет less и преобразовывает полученный less css.
Вот код:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var less = require('less');
exports.less = function(req, res){
    var postText='';
    req.addListener('data', function (postDataChunk) {
        postText += postDataChunk;
    });
    req.addListener('end', function (){
        less.render(postText, function (e, css) {
            console.log('process pid:'+ process.pid);
            res.send(css);
        });
    });
};



Он прописан вот так:
Код: javascript
1.
app.post('/less', routes.less);



Создан "кластер", как он зовется тут. Это отдельная песня. В node_modules/cluser/docs/api.md сказано, что вот так все должно работать:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
     var cluster = require('../')
       , http = require('http');

     var server = http.createServer(function(req, res){
       res.writeHead(200);
       res.end('Hello World');
     });

     cluster(server)
       .listen(3000);


Но так не работает :) Пишет:
cluster = cluster(server).listen(3000);
^
TypeError: object is not a function

Итого вот так сделано:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var cluster = require('cluster');
....
if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', function (worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {
    http.createServer(app).listen(app.get('port'), function () {
        console.log("Express server listening on port " + app.get('port') + " pid:"+ process.pid);
    });
}


На моем компе создается 8 worker.
Так вот. Начал я это все тестировать с JMeter. 1 пост-запрос с коротеньким css. Проверка статуса на 200 OK. 30 секунд таймаута на connect и 30 секунд на получение ответа.
Этот "кластер" затыкается даже при 20 потоках на определенном этапе - через 20-30 секунд после запуска теста. Throughput вначале показывает аж 2000 в секунду. Потом скатывается на 300 при ~50% ошибок. Сервер подвисает, не обрабатывает никаких запросов, потом обрабатывается 30-40 и снова затыкается.

Обратил внимание на то, что распределение нагрузки по нодам происходит как-то странно. Задействованы далеко не все, а одна - две. При 500 потоках больше - 5-6. Но на конечный результат это не влияет.

Скажите, пожалуйста, это у меня руки кривые или так и обстоят дела с этим чудо-сервером? На моем томкате и жбос никогда такого не наблюдал. Где ошибка? Буду очень благодарен.


______________________________________________________
while(!death){
Life.liveAndBeHappy();
}
...
Рейтинг: 0 / 0
Node.js
    #37948617
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netstat показывает огромное количество открытых TCP портов в TIME_WAIT . Может, достигнуто макс. количество? :))
...
Рейтинг: 0 / 0
Node.js
    #37948627
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все верно. Use keep-alive решает проблему.

Модератор: Тема перенесена из форума "HTML, JavaScript, VBScript, CSS".
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Node.js
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]