运维笔记(一)

运维笔记(一)

标签: 运维 linux 内存溢出

背景描述:

​ 网站试用过程中有时出现突然卡主,过1、2分钟才有反应的情况,一开始没有在意,以为是测试人员的网络问题(疫情期间都在家办公)。后来这个问题每天都会出现,我意识到这其中必然存在某个bug,必须找出来并解决。

​ 项目部署了多个实例,使用nginx做代理,nginx120s没有响应就自动切换了服务,所以才会出现卡住一段时间后又能正常使用的情形。经过一段时间查询,发现一台web服务器的日志总是会终止在某一时间,判断该服务每天运行一段时间后会自动停止。

​ 而这台服务器上部署了另外一个一模一样的服务,那个服务不停说明代码没有问题。问题应该出现在服务器上。后来在网上搜索了一下,尝试检查一下内存。果然,问题出在了内存溢出,系统自动关闭了其中一个服务。

​ 一开始想把两个服务设为守护进程,防止系统关闭。但是仔细考虑了下,不找出内存溢出的真正原因,无法解决问题。在一番研究之后,发现了原因所在:我写的自动关闭所有tomcat服务的脚本运行出现了问题,tomcat没有正确关闭,而重启又会开启新的进程,这样经过多次部署后,服务器上就多了6个无用的tomcat进程消耗系统资源。把它们关掉之后,问题解决。

​ 现在正在研究脚本为什么没有正确关闭tomcat,暂且先记下积累的运维经验。

1.查看系统日志

  • 打开/var/log/messages文件 这个为linux系统日志文件
Dec  7 21:02:45 iZrj97s23bov6rewm9af7aZ kernel: Out of memory: Kill process 22692 (java) score 230 or sacrifice child
Dec  7 21:02:45 iZrj97s23bov6rewm9af7aZ kernel: Killed process 22692 (java) total-vm:2676800kB, anon-rss:445468kB, file-rss:0kB, shmem-rss:0kB

看见这个记录就明白了内存溢出,服务挂了。

2.查看内存

free -mh 查看内存

jmap -histo pid查询指定java进程的所有对象使用内存情况

jstack pid |grep tid -A 30 查看该线程堆栈信息

3.top

top命令执行结果的前五行为系统整体的统计信息,代表含义如下:

第1行:系统时间、运行时间、登陆终端数、系统负载(分别为1分钟、5分钟、15分钟内的平均值)

第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比。

第4行:物理内存总量、空闲内存总量、内存使用量、作为内核缓存的内存量。

第5行:虚拟内存总量、空闲虚拟内存总量、虚拟内存使用量、①被提前加载的内存量。

top -p pid 查看指定pid进程

4. ps -aux --sort -pmem | less

查看进程,按试用内存排序

5.ps -ef|grep java

搜索

6.硬盘

df -hl 查看磁盘剩余空间

df -h 查看每个根路径的分区大小

du -sh [目录名] 返回该目录的大小

du -sm [文件夹] 返回该文件夹总M数

du -h [目录名] 查看指定文件夹下的所有文件大小(包含子文件夹)

查看硬盘的分区 #sudo fdisk -l

查看IDE硬盘信息 #sudo hdparm -i /dev/hda

查看STAT硬盘信息 #sudo hdparm -I /dev/sda 或 #sudo apt-get install blktool #sudo blktool /dev/sda id

查看硬盘剩余空间 #df -h #df -H

查看目录占用空间 #du -hs 目录名

优盘没法卸载 #sync fuser -km /media/usbdisk

原文地址:https://www.cnblogs.com/cxy2016/p/12600410.html