我正在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
";命令。然后检查在内存大幅增加时运行了哪个命令。仔细检查这个命令是否创建了太多的线程或进程,或者同时打开了太多的文件。该命令可能有一些标志,您可以使用它们来减少它创建的线程或进程的数量。