井底圈小蛙
关注科技圈

Golang程序编译执行时出现signal: killed的解决方法

近日Linux服务器上进行编译运行go run main.go命令的时候,程序运行一段时间,会中止,报错signal: killed。网上搜索,发现可能是内存不够的问题。执行命令:dmesg | egrep -i -B100 'killed process'

发现报错信息:

[4863735.833953] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-0.slice/session-50.scope,task=main,pid=160906,uid=0
[4863735.833967] Out of memory: Killed process 160906 (main) total-vm:1978632kB, anon-rss:988108kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:2056kB oom_score_adj:0

可以确定问题是Out of memory, Linux进程内存不足,进而决定杀掉main进程。total-vm就是进程使用的虚拟内存大小,其中部分内容映射到RAM本身,也就是主存,被分配和使用也就成了RSS;部分RSS在实际内存块里面分配,成了anon-rss,叫做匿名内存。 既然是内存不足,那我们只用在服务器上分配swap分区就可以解决此问题。

Linux系统在安装的时候是可以分配swap分区的,但是我们购买的VPS很多都是预先安装好的系统。所以还是需要我们在系统运行的环境下解决这个问题,那么如何在系统安装完成后进行swap分区呢?

创建要作为swap分区的文件:增加2GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。

dd if=/dev/zero of=/root/swapfile bs=1M count=2048

格式化为交换分区文件:

mkswap /root/swapfile #建立swap的文件系统

启用交换分区文件:

swapon /root/swapfile #启用swap文件

使系统开机时自启用,在文件/etc/fstab中添加一行:

/root/swapfile swap swap defaults 0 0
圈小蛙现已开通Telegram。单击此处加入我们的频道 (@quanxiaowa)并随时了解最新科技圈动态!

除特别注明外,本站所有文章均系根据各大境内外消息渠道原创,转载请注明出处。
文章名称:《Golang程序编译执行时出现signal: killed的解决方法》
文章链接:https://www.qxwa.com/solution-for-signal-killed-when-compiling-and-executing-golang-programs.html
分享到: 生成海报

评论 抢沙发

科技圈动态,尽在圈小蛙

联系我们关注我们