我怎么能找到一个内存泄漏(或什么是占用这么多的内存)在ParcelJS?



我正在BitBucket管道中运行ParcelJS 2,但是我们的管道偶尔会耗尽内存。

我希望能够准确地指出问题来自哪里-是否这是一个单一的节点模块依赖,或者如果它只是ParcelJS整体的问题。

我已经尝试在构建发生时注销CI容器中的内存使用情况,我可以看到它在构建结束时达到最大内存-有时这会导致崩溃,有时不会。我通过在管道中运行以下命令来完成:

- while true; do ps -aux && sleep 30; done &
- while true; do echo "Memory usage in megabytes:" && echo $((`cat /sys/fs/cgroup/memory/memory.memsw.usage_in_bytes | awk '{print $1}'`/1048576)) && sleep 0.1; done &

输出……

4082
Memory usage in megabytes:
4083
Memory usage in megabytes:
4093
Memory usage in megabytes:
4095
Memory usage in megabytes:
4095
Memory usage in megabytes:
4094
Memory usage in megabytes:
4095
etc...

关于如何找出问题可能在哪里,有什么建议吗?

提前感谢。

- while true; do ps -aux && sleep 5; done &
- while true; do echo "Memory usage in megabytes:" && echo $((`cat /sys/fs/cgroup/memory/memory.memsw.usage_in_bytes | awk '{print $1}'`/1048576)) && sleep 2; done &

对于使用Docker镜像的构建来说,这是一个很好的命令,它似乎可以很好地用于Bitbucket pipeline和可能的其他CI/CD服务,如GitHub Actions和GitLab CI/CD。在CI/CD构建过程中,实时显示Docker容器内的内存使用情况。

这里有一些关于Docker内存使用命令的参考和教程:

  • https://confluence.atlassian.com/bbkb/troubleshooting bitbucket都-管线- 1141505226. - html
  • https://fabianlee.org/2020/01/18/docker-placing-limits-on-container-memory-using-cgroups/
  • https://github.com/oracle/docker-images/issues/1939

你已经知道,Bitbucket pipeline对每个Docker容器的内存使用有严格的限制(这是指RAM内存,而不是磁盘空间)。默认情况下,每个构建步骤最多有4 GB可用内存:

  • https://support.atlassian.com/bitbucket-cloud/docs/configure-bitbucket-pipelinesyml/
  • https://janosmiko.com/blog/2021-09-18-demystifying-bitbucket-pipelines-memory-limits/

要精确定位大量内存使用,考虑将睡眠时间更改为2或5秒,并可能为每条消息添加时间戳,使用"date";命令。然后检查在内存大幅增加时运行了哪个命令。仔细检查这个命令是否创建了太多的线程或进程,或者同时打开了太多的文件。该命令可能有一些标志,您可以使用它们来减少它创建的线程或进程的数量。

最新更新