服务器监控
开源解决方案
Nagios
zabbix
等
主要的监控项
CPU
cat /proc/cpuinfo
* /proc/是内存空间中的系统操作命令,并非磁盘中的实际存储空间
vmstat [间隔时间] [执行次数]
基础组件
第一行数据不准确(刚开机是准的,但是程序执行过后就不准了)
top
集成了很多系统信息在里面
f 设置展示的信息
h 显示所有可用命令
1 显示所有CPU的核心数
0.0%sy 锁占用(很少超过10%)
0.0%id 空闲CPU百分比
0.0%wa IO等待(iowait)
0.0%hi 硬件中断
0.0%si 软件中断
0.0%st 实时
swap 虚拟内存
mpstat
个别系统包含此命令,有些服务器没有
内存
cat /proc/meminfo
当前系统的运行信息
MemTotal 总内存
MemFree
Buffers
Cached
topfree / free
-m
total 总内存
used 已占用
free 空闲
空闲内存应当由free与cached相加取得。
shared
buffers
cached 缓存空间。当存在大量I/O读写的情况下,cache会大量占用。
vmstat
查看挂载
df - hP
可以发现目录是挂载盘,但是看不出挂载位置
mount
不要跟任何参数,否则就是重新挂载
挂载位置、挂载方式(只读/读写等)
cat /etc/exports 配置允许挂载的IP地址,挂载的方式等参数
/dev/shm 共享内存
所有在该目录下创建的文件是不占用磁盘空间的,是创建在内存空间中。
比在磁盘中运行速度会快很多。
内存不足
两种内存不足情况:
1、堆内存不足
2、实际内存不足
网络
/pro/net/dev
/sys/class/net/dev
netstat
路由表
ifconfig
查看两条机器是否从属于同一子网,应该看路由表与掩码
cat /proc/net/dev
查看网络配置
cat /sys/class/net/eth0/address
cat /sys/class/net/eth0/iflink
1 禁用
2 启用
cat /sys/class/net/eth0/statistics/rx_bytes
利用该值来监控带宽数据
编写脚本监控实际带宽,关注峰值速度
--------------------------------------------
while true
> do
> a=`cat /sys/class/net/eth0/statistics/rx_bytes`
> sleep 1
> b=`cat /sys/class/net/eth0/statistics/rx_bytes`
> echo $(($((b-a))/1024/1024)) MB/s
> done
--------------------------------------------
存储
mount
df
查看挂载
df - hP
可以发现目录是挂载盘,但是看不出挂载位置
mount
不要跟任何参数,否则就是重新挂载
挂载位置、挂载方式(只读/读写等)
cat /etc/exports 配置允许挂载的IP地址,挂载的方式等参数
/dev/shm 共享内存
所有在该目录下创建的文件是不占用磁盘空间的,是创建在内存空间中。
比在磁盘中运行速度会快很多。
内存不足
两种内存不足情况:
1、堆内存不足
2、实际内存不足
du
fdisk,parted
lv, vg, pv 相关
java进程监控
关注点:
* 堆内存,非堆内存
* gc频率和效率
* 堆栈信息
常用工具:
(图形化)
jconsole
jvisualvm
(命令行)
jstat <-options> PID
-options 查看命令
jstack
看到的东西是一样的。
内存泄露:每次GC释放后的可用内存空间越来越少,直到最终没有可用空间。但该周
期有可能很短,也有可能很长,所以需要使用脚本来收集监控数据,进行判断。
JVM内存区域
GC线程数不宜过多
新生代配置略大一些
s0+s1+eden
old
sgc / sgc time
fgc / fgc count
1.curl 测试网络 如果不通返回(7)
2.mkdir -p (带参数递归创建多个目录) {01..12} m{01..12}
3.ls 查看当前目录列表
4.drwxr -xr -x(d表示当前 第一组 第二组:当前用户 第三组:其他用户)
ls(带l长列表信息 带d查看当前目录 ls --full -time查看时间 )
5.cat 查看文件内容(带n 加载行数) vi进行编辑
6.head (-1表示第一行 默认10行)
7.echo "123" >> wef/q.txt(追加信息到文件)
8.head -4 q.txt |tail -3(文件内容第2行到第四行)
9.free(查看内存 接参数大小) cached缓存io
10.cat /proc
cat /proc/sys/vm/drop_caches (修改0为1 清理数据)
echo "1" > /proc/sys/vm/drop_caches清理cached io缓存 不清理INODE
> 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空;
一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节);
>>
这个是将输出内容追加
11.cat /proc/cpuinfo |grep processor|wc -l(查看CPU核心数|wc -l统计行数 |less查阅文件翻页)
12.top (前面系统时间 up开机时长 同uptime tasks:多少个进程 运行 睡眠 停止 僵死)
13.last(pts虚拟终端 登录信息)
14.ps -ef查看当前进程(带[]表示系统进程 grep 模糊查询 grep[-A -B -C (数字)]查询关键字上文、下文、上下文多少行--)
15.查看端口 netstat -lntp route -n[Gateway网关 0.0.0.0全网段 IP*掩码=网关](服务起不来问题查看进程及端口监听)
16.rpm -qa |grep which(查看文件有没有安装及版本信息)
17.yum (-list 查看所有安装包 -provides fc *)
18.kill (-l查看所有信号 -9强制杀进程 -15等待进程执行完再杀)
19.df -h(查看文件系统 /opt /boot )
du -sh 查看当前目录大小(接目录指定某个目录)
20.ll /proc/|wc -l (统计目录文件数量) ls -a
21.cp file newfile (复制) mv file newfile(移动文件,重命名)
22.ls -l|xargs df -hs(赋予参数)
vi
:/?
:s/no/yes/ g
sed 's/no/yes/ g' file(显示效果但不修改文件 -i)
find 路径 -maxdepth -mindepth -iname '文件名称'()
vi x删除 u撤销 dd删除 yy复制
grep (-E多个条件 -v反向筛选 -r递归 -n行数)
last |gawk '{}' $+行号第几列 0表示整行 print输出
a=10
if [[ $a = 10 ]];then echo "yes" ;else echo "no";fi -eq
gawk语法判断需要==
1.gawk 2.sed 3.正则
打war包执行命令
jar -cvf xxxx.war ./*
当前目录下所有目录的大小以M为单位 通过大小排序
du -sm *|sort -n
通过关键字搜索日志
find log |xargs grep ""
寻找进程占用程序windows
netstat -aon|findstr "8080"
tasklist|findstr "4060"
taskkill /F /PID 4060
grep -E "1592" 0520.log >20170522-1.log
nslookup 解析网址
cat /etc/passwd
https://stackoverflow.com/
find 目录名 -type f -iname'*.pdf'|wc -l
find 目录名 -type f|xargs file |grep -i "PDF document"|wc -l
-----------------------------------------服务器监控命令----------------------------------------
iostat 查询CPU使用情况 磁盘IO情况
free -m 查看内存
mpstat -P ALL 显示每个服务器的CPU统计信息,或者每个处理的CPU统计信息
netstat 显示很多有关网络方面的信息 socket 使用情况 路由情况 网卡情况 协议情况 网络流量统计
nmon 查看处理器利用率 内存使用率 运行队列信息 磁盘IO统计 网络IO统计 换页统计
pmap 显示进程占用的内存量
ps/pstree ps告诉我们每个进程使用的内存量以及所消耗的CPU时间 pstree 则会告诉我们进程间的父子关系
sar 涵盖CPU利用信息
tail -200 /var/log/messages |grep error
tracert www.baidu.com --第一个IP地址为出口网关
查看日志
sed -n'/2018-03-04 17:00:00/,/2018-03-04 19:00:00/p' server.log(查看时间段日志记录)
sed -n '60000,100000p' server.log(查看日志60000行到100000行)
批量替换a文本内容1001为1002
sed -i "s/1001/1002/g " a.txt
抓包分析
netstat -nap | grep pid 根据进程号查看端口
tcpdump -i eth0 port 35530 根据端口抓包直接在屏幕上显示
tcpdump -i eth0 port 35530 -w captured.pcap 抓取到的包的数据即在captured.pcap文件中,在windows上用wireshark软件打开即可
ssh -v -p port ip 测试网络联通
ssh -l user ip
ssh user@ip
连接另外一台主机
ll -lh查看目录下文件大小
起别名
alias ss=ssh