一次服务器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确实是通过配置文件控制服务的启动,此处尚且不展开这部分内容,更详细的内容可以参考:
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
就行了^_^。