在生产环境中使用耗时较大的命令时 可以使用nice -n 19 后跟命令,以减小对应用进程的影响
磁盘
inode告警
指标df.inodes.free.percent
inodes用尽将导致无法创建新文件,影响系统的各种核心功能,最终导致机器崩溃。
文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。 文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。 每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
df -i #查看luse%
产生的原因可能是因为生成了过多的文件,或者文件夹。
磁盘利用率报警
当服务中有过多日志,或者临时文件时会产生磁盘利用率低的问题。一般查看根目录的使用情况,查看:
df -h
查找出来文件夹下深度为两层的最大文件或文件夹大小,/xxx/为目录,后缀的/不能省略
du -h --max-depth=2 /xxx/ 2>/dev/null | sort -r | head
如果发现了较大的文件可以使用
因为可能有进程在使用这个文件,如果使用rm操作会导致文件句柄未释放,所以还是用echo来清空此类文件
echo '' > 文件名
常用脚本
- 批量清除1天前的文件
for i in `find /xxx/ -type f -mtime +1 -name "*.log" 2>/dev/null`; do echo '' > $i; done
- 批量清理500M以上的日志
for i in `find /xxx/ -type f -size +500M -name "*.log" 2>/dev/null`; do echo '' > $i; done
- 删除10小时以前修改过的文件
find /xxxx/ -type f -cmin +600 -name "*.log" 2>/dev/null | xargs -i rm -fr {}
删除好以后记得再验证一次, 进入文件夹后如果未发现大文件,可能是隐藏文件在ls时加上-a选项即可
磁盘IO告警
disk.io.util 磁盘的使用率是一秒有百分之多少的cpu用于I/O操作
crush
coredump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump
通过
gdb java core文件
查看具体内容
cpu
cpu load
- cpu 显示的是1、5、15分钟的系统平均负载
平均负载是指在间隔期内的cpu运行队列运行(r)或者等待(b) 的平均进程数
可以通过
top
命令查看 通过命令
vmstat 1 5 #1 1秒一次 5 显示5次
通过命令,查看某个进程下线程的情况
top -pH pid
出现这种问题可能的原因是执行任务执行缓慢,执行缓慢的原因可能是在等待资源,等待的资源可能是内存,也可能是io,需要具体情况具体分析。如磁盘关注io量,内存关注使用比例。
cpu busy
cpu使用率指标
cpu.busy = cpu.us(user cpu time) + cpu.sy(system cpu time) = 1 - cpu.idle(idle cpu time)
- 问题1:程序自身问题 通过top命令,按shift + p按cpu使用排序找到问题进程 通过命令
top -pH pid
找到对应线程 如果是java程序,则通过
jstack -F -m -l javaPID > stack.log #生成栈信息
printf '%x\n' thread_id #16进制线程号
grep '16进制线程号' stack.log -20
- 问题2:虚拟机存在超售问题 查看cpu steal指标
内存
内存利用率
指标
- swap: 拿出一部分硬盘空间,当作交换分区,避免系统内存不够用时,发生OOM;当系统运行时,所需的物理内存不够时,将选择一部分数据交换到swap分区(SWAP OUT-SO),当这部分数据再次使用时,在从swap分区交换回系统内存中(SWAP IN - SI
- swappiness参数:取之范围0~100,值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。
通过命令可以查看实际使用的swap进程
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less