JS heap out of memory - bwip-js
-
Hello there
thank you for the fantastic product you have created!I'm using the jsreport to generate a PDF with a barcode (actually 2x barcodes but that is not relevant) and I'm experiencing an error with the heap memory.
I've seen others had similar issues already but in this case I think it may be different, maybe I'm doing something wrong.The settings:
{ "trustUserCode": true, "store": { "provider": "fs" }, "logger": { "console": { "transport": "console", "level": "info" } }, "workers": { "numberOfWorkers": 2 }, "templatingEngines": { "timeout": 600000, "strategy": "http-server" }, "chrome": { "strategy": "chrome-pool" }, "extensions": { "express": { "renderTimeout": 600000 } } }
There is only 1x template and for the test it only contains single paragraph with static text. What is causing the problem is the script (shared global, I have also tried it as the template script)
const bwipjs = require('bwip-js');
I have followed the steps here https://jsreport.net/blog/barcode-in-report#wrap to get the barcode up & running.
Using the Apache jmeter to run some load (2x users, infinite loop until error occurs) I can relatively quickly get the heap error. This is how I run the docker
docker run -e NODE_OPTIONS=--max-old-space-size=768 -m 1024m -p 5488:5488 jsreportlocal
I use handlebars, chrome-pdf to generate the PDF.
It looks like some sort of memory leak but I do not why. Any advise would be much appreciated.
-
Can you try exactly this code in helpers
const bwipjs = require('bwip-js'); function barcode() { return bwipjs.toBuffer({ bcid: 'code128', text: '0123456789', scale: 3, height: 10, includetext: true, textxalign: 'center', }).then(p => p.toString('base64')) }
and this content in template
<img src='data:image/png;base64,{{barcode}}' />
If you loop such template render, does it also OOM?
What jsreport version do you use? Can you try the latest?
-
Hello
I have tried it (again) with the exact method body and it failed again.error: Error during processing request at http://localhost:5488/api/report, details: Error [WORKER_CRASHED]: Worker terminated due to reaching memory limit: JS heap out of memory at new NodeError (node:internal/errors:387:5) at Worker.[kOnExit] (node:internal/worker:285:26) at Worker.<computed>.onexit (node:internal/worker:202:20)
I have jsreport 3.11.3, see below.
-
I have tried to remove the bwip-js and used some other package (pretty much random), so I used axios, but only like this
const axios = require('axios');
The jsreport under load survived 27mins, then I got the heap error. I'm not sure this is relevant but it feels like something is not released correctly.
-
It could be as you say. We are checking on it now. Will post here as soon as we have details.
-
Update: This is actually really a bug. It is likely a nodejs bug that started to occur since nodejs 16.
We've implemented a workaround which we are testing now.