@basuser123 said in Постоянный старт node js при запуске скрипта:
походу модуль какой-то.. а как узнать какой?
Самое очевидное решение - отключать поочерёдно модули и смотреть на результат
Таймаут во время выполнения функции на встроенном языке
Либа string-similarity. Тестил только на ней.
Тестовый скрипт. Проверяется схожесть слов из списка.
При запуске в 250-260 потоков все срабатывает хорошо, поочередно и в том числе с циклами.
Запуск в 300 потоков - node js не срабатывает и выдает Таймаут.
Запуск в 300 потоков - перед выполнением кода в node выставлена небольшая пауза для потоков - срабатывает нормально.
Запуск в 300 потоков , node обернул в игнорирование ошибок. Все 300 потоков падают в ошибку, далее сделан повтор выполнения в случае ошибки и перед повторным выполнением сделана такая же пауза как и в предыдущем случае - не работает. Вот этот момент самый интересный т.к. по идее все должно сработать так же как в предыдущем случае.
Основной скрипт. 250-300 потоков. Скрипт достаточно большой и действие node запрашивается не одновременно на всех потоках.
Предыдущая версия отчасти работает исправно, с игнорирование ошибки и повторении действия удается выполнить node за 2-3 минуты.... (то есть 1-3 раза получаю таймаут и на 4й раз успешно).
Скрипт запускает потоки пачками по несколько штук в течении часа. Как только потоков становится много (на глаз это примерно > 200) то начинаются те же проблемы с выполнением node.
Прикладываю тестовый скрипт, кто будет пробовать повторить - пробуйте несколько раз, один раз у меня во время первого запуска все сработало хорошо, а во всех остальных - нет.
0_1523028267350_test node.xml
0_1523028504429_вв.txt (список для сравнения)
Надеюсь описал достаточно понятно)

@DrPrime попробовал поставить 200 сек - не помогло, по дефолту стоит 60 сек видимо
по тестовому варианту можно подумать, что это происходит из-за большого количества одновременных обращений к node, но в основном скрипте одновременно выполняют это действие около 5 потоков
записал видео тестового варианта https://drive.google.com/file/d/1P5qgo7JJ87nWOjhzttO5a9tJSitUsRsx/view?usp=sharing
пока как-то так приходится работать

Думаю это всё таки баг. Но лучше уточнить у @support
Вот тестовый скрипт , который через node js выводит в лог слово test. Рандомная задержка происходит внутри node js:
function wait(ms) {
var start = Date.now(),
now = start;
while (now - start < ms) {
now = Date.now();
}
}
wait([[RANDOM_NUMBER]])
console.log("test")
Запуск в 258 потоков отрабатывает спокойно. А вот запуск в 259 потоков выводит все потоки в ошибку Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
Ещё заметил странность, я закрыл браузеры(обычные, не в BAS), закрыл второе окно BAS. И смог запустить свой тестовый скрипт в 268 потоков. Но опять же, запуск в 269 потоков крашит их всех.
Решил сделать запись с экрана, при включенной записи не даёт запустить больше 256, а без записи с экрана запускается до 269 потоков.


@SimpleUser Маловероятно, что у меня с @venom777 одинаковое железо. Что node js у меня и у него работает стабильно до 250 потоков, а дальше может совсем не запустится.
Я попробовал выделить ошибку в тестовом скрипте. У вас в нём какое максимально-рабочее количество потоков?
@fox Вам удалось решить эту проблему? У меня тоже при запуске в 39 потоках из 100 выскакивала ошибка
"Таймаут во время выполнения функции на встроенном языке"
В самой функции только это:
var low = ([[THREAD_INDEX]] - 2) * 876;
var high = ([[THREAD_INDEX]] - 2) * 1103;
function randomInteger(min, max) {
var rand = min + Math.random() * (max + 1 - min);
rand = Math.floor(rand);
return rand;
}
[[RND_WAIT]] = randomInteger(low, high);
await (new Promise((resolve, reject) => {
setTimeout(function(){
resolve();
}, [[RND_WAIT]]);
}));
В остальных 61 потоках все выполнялось нормально.
Но это если значение таймаута в ноде выставлено на "по-умолчанию". Затем я поставил там 10 секунд, и все 100 потоков выполнились без ошибок. Теперь вернул опять на "по-умолчанию" и ошибок уже нет, все 100 потоков успешны.
@Fox said in node js Таймаут:
Запуск в 258 потоков отрабатывает спокойно. А вот запуск в 259 потоков выводит все потоки в ошибку Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
Проблема кстати до сих пор не решена, все также потоки завершаются с ошибками - "Таймаут во время выполнения функции на встроенном языке"
@Vincent_ said in node js Таймаут:
Тоже столкнулся с проблемой, что nodejs 18 падает и на 10 потоках
Можно и в 1 поток уронить инстанс ноды. Выполните эту строку в ноде:
await new Promise(r => setTimeout(r, 2000000));
Поток завершится ошибкой "Таймаут во время выполнения функции на встроенном языке"
@Fox Как в таком случае листить сервер? Вот у меня, есть код
async function startBaS(idsession, uuid) {
await BAS_FUNCTION(
"update",
{ "idsession": idsession, "uuid": uuid }
)
}
wss.on('connection', (ws) => {
ws.on('message', async (data) => {
console.log(data)
if (!data) {
return
}
const message = JSON.parse(data);
console.log(message);
if (Object.keys(message).length == 0) {
ws.send(JSON.stringify({
type: 'error',
message: 'params not valid Object.keys(message).length == 0'
}))
return
}
const _id = message._id; // id session
const _uuid = message.uuid; // id session
if (!_uuid || !_id) {
ws.send(JSON.stringify({
type: 'error',
message: 'params not valid !_uuid || !_id',
uuid: _uuid
}))
return
}
try {
ws.send(JSON.stringify({ type: 'task_progress', uuid: _uuid, id_session: _id }));
await startBaS(_id, _uuid)
ws.send(JSON.stringify({ type: 'update_cancel', uuid: _uuid, id_session: _id }));
} catch (e) {
console.log(e)
ws.send(JSON.stringify({
type: 'update_error',
message: e.message
}))
}
});
});
await(new Promise(async (resolve, reject) => {
while (true) {
await new Promise(resolve => setTimeout(resolve, 1000))
}
}));
если я не использую цикл ожидания, который указан внизу - функции баса из ноды просто не будут работать - (хотя сам сервер будет принимать запросы и отвечать на них )
Может есть какой-то коннектор к басу или порт?
@Abraham В таком случае вам нужно https://github.com/CheshireCaat/bas-remote-node Тоесть логика приложения пишется в самой node и из нее запускаются нужные функции БАС