为什么一些NodeJS任务会导致Ubuntu冻结而不是Windows?

3

最近我遇到了一个有趣的问题。

我正在使用Angular JS开发一个前端比较复杂的项目,有一百个Jest测试。我的电脑内存有16GB,但是这个项目非常耗费内存,有时候会完全占满内存,导致电脑无法同时运行yarn test(需要3到4GB内存)或者Cypress工作流测试而不出现延迟问题。

为了避免大的冻结(长达几分钟)和崩溃,我增加了交换空间到16GB。

然而,由于各种原因,我不得不在Windows 10上开发这个项目,但是没有遇到这些问题。一切都很顺利,即使内存也完全被占用,CPU达到100%,图形界面也不会出现延迟,甚至可以进行屏幕共享。

我甚至能够同时运行20个yarn test而不会出现延迟,这在Linux上似乎完全不可能,即使增加了交换空间。

我发现Windows默认使用内存压缩,而Linux并不是这样,但是在我的比较中,压缩内存最多只有549MB。我最初认为这可能是gnome的问题,因为它被认为是比较耗费资源和有时候不稳定的,但我也使用KDE进行了测试,结果一样。

我也听说Windows会为图形环境分配特殊资源,而Linux可能会像对待其他进程一样处理它,但这并不能解释所有的问题,因为整个电脑在Linux上会冻结而在Windows上不会。

所以我开始想知道Windows在内存或者进程管理方面是否做得比Linux更好。

我的配置:

Computer model : Dell XPS-15-7590
Processor :      Intel core i7 9750H, 2,6 GHz, 4,5 GHz turbo max (6 cores, 12 threads)
RAM :            16 Go 
Graphic card :   GTX 1650M
Screen :         4K 16:9
SSD :            NVME 512 Go

What are "Mo" & "Go" units? - Marc
@Marc 法语中的MB和GB - Fusselwurm
1个回答

0

我在Ubuntu 22.04上使用16GB RAM和Intel i5-12400处理器时遇到了同样的问题。

我的解决方案是在jest配置中限制最大工作线程数。

"maxWorkers": 4

对我也适用。你还可以将其从jest配置中移除,使用"-w, --maxWorkers"命令行参数,比如npx jest -w 4npx jest --maxWorkers 50%等。 - Nino Filiu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接