workerize-loader icon indicating copy to clipboard operation
workerize-loader copied to clipboard

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

Open kilofafeure opened this issue 3 years ago • 2 comments

Hi, I'm trying to use your package but I'm not able to make it work. If I remove my worker from the application compiles fine, once I uncomment the code I get the error message:

69% building 3094/3117 modules 23 active C:\Desarrollo\uiserpreco2\uiserpreco\node_modules\ts-loader\index.js!C:\Desarrollo\uiserpreco2\uiserpreco\src\app\components\Maintenance\Clients\ClientWizardRedirect.tsx
<--- Last few GCs --->

[7332:000001A3BF8073C0]   211369 ms: Mark-sweep (reduce) 2039.2 (2082.9) -> 2038.6 (2083.4) MB, 2201.3 / 0.0 ms  (average mu = 0.085, current mu = 0.013) allocation failure scavenge might not succeed
[7332:000001A3BF8073C0]   213807 ms: Mark-sweep (reduce) 2039.7 (2083.4) -> 2038.9 (2083.9) MB, 2432.5 / 0.0 ms  (average mu = 0.046, current mu = 0.002) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF6D0B9BD2F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+112159
 2: 00007FF6D0B2CD66 v8::internal::WebSnapshotDeserializer::context_count+65430
 3: 00007FF6D0B2DC1D node::OnFatalError+301
 4: 00007FF6D1467BBE v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF6D145283D v8::SharedArrayBuffer::Externalize+781
 6: 00007FF6D12D532C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1468
 7: 00007FF6D12D2662 v8::internal::Heap::CollectGarbage+3778
 8: 00007FF6D12D01B5 v8::internal::Heap::AllocateExternalBackingStore+1909
 9: 00007FF6D12F35D1 v8::internal::Factory::NewFillerObject+209
10: 00007FF6D1023175 v8::internal::DateCache::Weekday+1349
11: 00007FF6D14EFF01 v8::internal::SetupIsolateDelegate::SetupHeap+472849
12: 000001A3C26AA381

I'm using your package with path, not with webpack. And I'm using it like this:

I'm importing the worker in my class component like this:

import createFooWorker from 'workerize-loader!../../workers/headerWorker';
import * as headerWorker from '../../workers/headerWorker';
const workerHeader = createFooWorker<typeof headerWorker>();

and I'm using it like this:

componentWillUnmount() {
    workerHeader.terminate();
}

async handleCreateExcel() {
    const { excelData } = this.state;
    await workerHeader.getExcelData(excelData);
}

async getNotifications(emitLang = false) {
        if (!this.searchingNotifications) {
            this.searchingNotifications = true;
            updateTaskGridObs.send();
            await workerHeader.getNotifications().then((response: any) => {
                this.setState(
                    {
                        notifications: is.existy(response) && hasItems(response.Result) ? response.Result : [],
                    },
                    () => {
                        this.searchingNotifications = false;
                        if (emitLang) this.props.i18n.changeLanguage(this.state.selectedLang);
                    },
                );
            });
        }
}

I've defined the module package in my typings.d.ts like this (I've found this code looking the package isssues):

declare module 'workerize-loader!*' {
    type AnyFunction = (...args: any[]) => any;
    type Async<F extends AnyFunction> = (...args: Parameters<F>) => Promise<ReturnType<F>>;

    type Workerized<T> = Worker & { [K in keyof T]: T[K] extends AnyFunction ? Async<T[K]> : never };

    function createInstance<T>(): Workerized<T>;
    export = createInstance;
}

I've also tried to increase the memory with: SET NODE_OPTIONS=--max_old_space_size=8192, but didn't solve the problem.

I don't understand what I'm doing wrong,. any help will be apreciated. Thanks in advance

kilofafeure avatar Dec 15 '21 08:12 kilofafeure

Did you find any solutions yet?

rutvay-dv avatar Jun 06 '22 09:06 rutvay-dv

Did you find any solutions yet?

No, I didn´t and I couldn't lose more time on it and I found this: https://www.npmjs.com/package/fetch-worker. It's old, it's not updated but it save my day.

kilofafeure avatar Jun 08 '22 13:06 kilofafeure