LINUX.ORG.RU

Хроники ноды. Эпизод 5й. Апокалипсис.

 ,


0

1
require('fs')
    .createReadStream('data.txt', { encoding : 'utf8' })
    .on('data', chunk => {
        chunk.split('').forEach(function () {
            setTimeout(() => {}, 100000);
        });
    });

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

сеньор поставил мне ультиматум: если в логе не будут присутствовать конкретные данные протекающих объектов — имена переменных, индексы массивов, куски кода замыканий, то меня лишат бесплатного фитнесса.

Что делать? Валить абатна на похапе?

Зы. Изучить ядро V8 и умереть, да.

Перемещено beastie из talks



Последнее исправление: EnterpriseMobility (всего исправлений: 3)

Искать другого сеньёра или выполнять поставленную задачу. Почему сразу на php. С другой стороны, а чем плох php? У меня вот друг пишет на нём и наоборот плюётся от этого нашего js, и я его понимаю.

Хватит ныть, работай или работай на других, в чём проблема то?

ixrws ★★★
()
Ответ на: комментарий от EnterpriseMobility

V8 течет как бабы от моей зарплаты.

Учитывая что у тебя из баб только руки, то все оптимистично для сеньера.

Deleted
()
Ответ на: комментарий от EnterpriseMobility

Ну раз бабы текут, значит делай как сказал сеньёр и копай V8.

Ну а если всё таки надоело, ищи другого сеньёра. Других выборов нету.

ixrws ★★★
()
Ответ на: комментарий от EnterpriseMobility

А что это ты вообще такое написал?

Это что то типа:

.on('data', function(chunk) {
    chunk.split('').forEach(function () {
        setTimeout(() => {}, 100000);
    });
});

?

uin ★★★
()
Ответ на: комментарий от EnterpriseMobility

Нет смысла кстати сплитить текст в твоем случае,

"abcd"[0] //=> "a"
"abcd"[2] //=> "c"
Утиная типизация же

Пиши сразу вот так:

    Array.prototype.slice.call(chunk, 0).forEach(function () {
        setTimeout(() => {}, 100000);
    })
Эсли чунк это строка конечно.

uin ★★★
()
Ответ на: комментарий от uin

это пример из гугла, якобы вызывающий эту ошибку. Я его не писал.

Мне нужно понять, почему здесь происходит утечка памяти.

EnterpriseMobility
() автор топика
Ответ на: комментарий от EnterpriseMobility

А это только аллах знает, не надо этим голову забивать

Я один раз написал лапшу вроде: returnSomeText().replace(new RegExp("^("+o+"+)"+b+"$)", "gm"), 'some_text')

Точный пример увы не вспомню, но мне в общем вылетело тоже чтото про переполнение буфера я аж прифигел так как в жизни никогда таких ошибок не видал. Это же не Си какое нибудь и не типа того.

В общем переписал все последовательно

var reg = new RegExp("^("+ o +"+)"+ b +"$)", "gm")
var txt = returnSomeText()

    txt.replace(reg, 'some_text')
И тот же самый код начал выполняться безошибочно. Где то там на более низком уровне видимо компилятор начинает мудрить и вязнет просто да и все.

uin ★★★
()
Ответ на: комментарий от EnterpriseMobility

Надо что-то такое:

let handleChunkPart = (part) => setTimeout(() => {}, 100000);

require('fs')
    .createReadStream('data.txt', { encoding : 'utf8' })
    .on('data', chunk => {
        chunk.split('').forEach(handleChunkPart);
    });

holuiitipun
()

сеньор поставил мне ультиматум

my deja vu is so strong, что я бы тебя им треснул.

t184256 ★★★★★
()
Ответ на: комментарий от EnterpriseMobility

Вот еще есть такая вот инфа:

Memory initialization

By default Emscripten emits the static memory initialization code inside the .js file. This can cause the JavaScript file to be very large, which will slow down startup. It can also cause problems in JavaScript engines with limits on array sizes

uin ★★★
()

А енто чего за язык такой крутой? Не хочу на таком писать.

anonymous
()
Ответ на: комментарий от EnterpriseMobility

а, дошло, оно каждый раз память по функцию выделяет в событии.

Основная проблема в том, что пока не завершатся все таймауты у тебя в памяти будет chunk и chunk.split("").

holuiitipun
()
Ответ на: комментарий от anonymous

функции писать Аллах не велит? обязательно let через лямбду?

Ага.

holuiitipun
()
Ответ на: комментарий от EnterpriseMobility

Ну и работай подай-принесием.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.