Any recent changes that impact buffering or caching procceses?

13 views
Skip to first unread message

guest271314

unread,
Dec 31, 2022, 3:11:16 PM12/31/22
to v8-users
I created Native Messaging hosts in several programming languages including C, C++, JavaScript. In JavaScript I created a host specific to QuickJS, Node.js, Deno. Node.js and Deno depend on V8. I use the same call in the extension to create hosts

globalThis.name = chrome.runtime.getManifest().short_name;

globalThis.port = chrome.runtime.connectNative(globalThis.name);
port.onMessage.addListener((message) => console.log(message));
port.onDisconnect.addListener((p) => console.log(chrome.runtime.lastError));
port.postMessage(new Array(200000));

chrome.runtime.onInstalled.addListener((reason) => {
  console.log(reason);
});

The same code used to work on Chromium Dev Channel. Now the V8 JavaScript engine-specific versions increase memory usage exponentially to upwards of 1GB, then exit.

The input is echoed when the input array is 2000.

Appears to be some kind of caching or process blocking. I am not sure though. 

Any recent changes that impact buffering or caching procceses?

guest271314

unread,
Dec 31, 2022, 5:35:32 PM12/31/22
to v8-users
Appears to be a memory leak in Node.js and Deno when input to stdin (and/or stdout) is greater than 4096*3. node executable memory usage climbs to 700MB+ then exits when input is new Array(4096*4). 

Are there any V8 flags I can use to work around this?

guest271314

unread,
Dec 31, 2022, 10:31:35 PM12/31/22
to v8-users
After more testing I narrow the input to stdin length for memory to increase pointing to Node.js and Deno executables to when I call this in the browser
port.postMessage(new Array((4096*3)+818));

65531

is written to log.txt, which is expected

JSON.stringify(new Array((4096*3)+818)).length // 65531

when I add 1 to that input array

port.postMessage(new Array((4096*3)+819));

1567386741

is written to log.txt.

The relevant Node.js code

function getMessage() {
  const header = new Uint32Array(1);
  readSync(0, header);
  const content = new Uint8Array(header[0]);
  writeFileSync('log.txt', JSON.stringify(header[0]));
  readSync(0, content);
  return content;
}

and Deno code

async function getMessage() {
  const header = new Uint32Array(1);
  await Deno.stdin.read(header);
  await Deno.writeTextFile("log.txt", header[0]);
  const output = new Uint8Array(header[0]);
  await Deno.stdin.read(output);
  return output;
}
Reply all
Reply to author
Forward
0 new messages