一次服务器OOM故障

一次服务器OOM故障

使用idm下载y2b视频导致服务器内存溢出,内核强制关闭了服务进程。

通过系统日志定位原因,并介绍了服务器维护的几个相关命令。

1 Linux系统日志 #

系统服务日志地址: /var/log/messages

Feb 19 16:02:12 vultr kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=firewalld,pid=1626,uid=0
Feb 19 16:02:12 vultr kernel: Out of memory: Killed process 1626 (firewalld) total-vm:358420kB, anon-rss:22096kB, file-rss:4kB, shmem-rss:0kB
Feb 19 16:02:12 vultr kernel: oom_reaper: reaped process 1626 (firewalld), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
Feb 19 16:02:12 vultr systemd: firewalld.service: main process exited, code=killed, status=9/KILL
Feb 19 16:02:12 vultr systemd: Unit firewalld.service entered failed state.
Feb 19 16:02:12 vultr systemd: firewalld.service failed.

日志说明的很清楚了,内存溢出,系统杀掉了部分进程。

至于是否网络请求占用了太多的系统资源,还需要进一步认证

2 设置服务器时区 tzselect #

由于并非使用国内的服务器,也一直懒于管理,导致服务器的时区并非GMT+8,日志看起来非常的别扭,因此,将服务器时区顺道进行一番设置。

设置时区的多种方法其中一种 参考:https://www.cnblogs.com/dead-trap-ramble/p/3462448.html

服务器时区为+0,需要将其改为+8,这样系统日志的时间能够对应上。

使用date -R命令查看当前系统时间/时区信息

使用tzselect命令选择时区,中国大陆根据命令提示选择Asia/China/Beijing即可。

命令执行完毕之后,还会提醒你将TZ='Asia/Shanghai'; export TZ写入到profile中,一般为根目录下的.bash_profile文件:

echo "TZ='Asia/Shanghai'; export TZ" >> .bash_profile

随即使用

source  .bash_profile

命令刷新配置文件,再使用date -R命令查看日期,已经和中国大陆时间同步。

另外,为了防止服务器重启之后,配置失效[^没有实测],可以覆盖系统的配置文件:

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

这条命令会有一条警告信息,覆盖即可。

3 查看并设置系统自启动服务 #

使用命令systemctl list-unit-files | grep enabled可以查看当前系统开机启动的服务信息。

实际上,再centOS中,使用chkconfig --list命令也可以获取使用systemctl...命令的提示:

# chkconfg --list
Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

denyhosts       0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

可以简单的通过systemctl enable nginx将nginx服务加入到自启动服务列表里面去。

linux确实是通过配置文件控制服务的启动,此处尚且不展开这部分内容,更详细的内容可以参考:

  1. Linux中设置服务自启动的三种方式
  2. linux开机启动服务的修改与查看

4 top命令是一个交互命令 #

控制台输入top可以查看当前系统的一些信息,并且这些信息是动态刷新的。

top命令是一个可交互的命令,可以通过快捷键指令进行交互,有一些常见的快捷指令:

  • M:按照内存占用排序进程
  • m:切换内存占用的显示方式
  • P:按照cpu占用排序进程

更多的快捷指令可以参考:https://man.linuxde.net/top

除了top之外,还有一个ps命令:http://c.biancheng.net/view/1062.html, 记住ps aux | grep xxx就行了^_^。