linux c 运行报错 killed

服务器上跑的一个程序,发现报了Killed。查看/var/log/messages里的日志,发现以下报错:

Aug 11 16:28:11 kernel: Out of memory: Kill process 3080 (forward) score 559 or sacrifice child
Aug 11 16:28:11 kernel: Killed process 3080, UID 0, (forward) total-vm:1429064kB, anon-rss:1130444kB, file-rss:136kB

原来linux下也有内存OOM的处理,不同于android 杀掉报OOM的进程,linux是杀掉当前最占用内存的进程。
当linux报OOM时,意味着整个系统的内存已经不足,如果不杀死进程的话,就会导致系统的崩溃。每个进程都会存有一个oom_score的参数,比如输出pid为988的oom_score:

cat /proc/988/oom_score

OOM Killer 会在系统报OOM的时候,杀死当前score最高的进程,一般情况也就是占用内存最大的进程。


解决方法:

一是增加系统内存,

二是优化进程,使其占用内存降低。

三是可以使用 oom_score_adj 参数,这个参数会被计算入oom_score,可以避免进程被杀死(不推荐使用)。
 

这个问题可能是因为 Puppeteer 在运行时占用了太多内存,导致系统自动杀掉了进程。你可以尝试以下几种方法来解决这个问题: 1. 增加内存限制:在启动 Puppeteer 的时候,可以通过 `puppeteer.launch` 方法的 `args` 参数来增加 Chrome 进程的内存限制。例如: ```javascript const browser = await puppeteer.launch({ args: ['--memory-limit=4096', '--max-old-space-size=2048'], }); ``` 这里设置了内存限制为 4GB,同时设置了最大堆大小为 2GB。 2. 关闭无用的 Chrome 功能:在启动 Puppeteer 的时候,可以通过 `puppeteer.launch` 方法的 `args` 参数来关闭一些无用的 Chrome 功能,从而减少内存占用。例如: ```javascript const browser = await puppeteer.launch({ args: [ '--disable-extensions', '--disable-dev-shm-usage', '--disable-setuid-sandbox', '--disable-accelerated-2d-canvas', '--no-first-run', '--no-sandbox', '--no-zygote', '--single-process', ], }); ``` 这里关闭了一些 Chrome 的扩展功能,禁用了共享内存和沙盒机制,同时强制使用单进程模式。 3. 重用浏览器实例:在使用 Puppeteer 进行大量操作时,可以考虑重用浏览器实例,避免每次都启动新的 Chrome 进程。例如: ```javascript const browser = await puppeteer.launch(); const page1 = await browser.newPage(); await page1.goto('https://example.com'); // ... const page2 = await browser.newPage(); await page2.goto('https://example.com'); // ... await browser.close(); ``` 这里先启动了一个浏览器实例,然后通过 `browser.newPage` 方法来创建新的页面,进行操作。最后记得关闭浏览器实例。 希望以上方法能够帮助到你解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值