linux服务器硬件资源指标、jvm监控 、存储数据库、redis监控

linux 监控命令 nmon dstat  top iostat vmstat iftop iotop lsof netstat

服务器硬件资源指标(cpu、内存、磁盘、网络) dstat top iotop  iostat  vmstat 

Iostat/iotop:Iostat 查询IO详细信息 ;iotop 查询IO被哪个进行消耗 (Iostat -xm 5)

lsof:查询进行文件句柄数,结合使用的命令为 ulimit -a | grep 'open files'

netstat:查询网络连接情况

Iftop:查询网卡流量

一、dstat -tcpmail 命令

安装命令  yum -y install dstat



cpu利用率 百分比 
usr用户cpu占了51%
sys 系统cpu 占了3%
Idl 闲置cpu 占了45%
wai 处于等待的进程消耗的cpu

hip  sip 分表代表硬中断 、软中断次数

procs 代表进程

单位个数

memory

内存使用率

单位大小

Used 使用 

Buff  作为buffer cache的内存,对块设备的读写进行缓冲

Cach 作为page cache的内存, 文件系统的cache。

Free 空闲的物理内存

不关注这些 ,关注swap 交换缓存 一直使用 系统会出问题   

  • si: 交换内存使用,由磁盘调入内存
  • so: 交换内存使用,由内存调入磁盘

disk

磁盘读写dsk  (read writ)

磁盘看 iostat 中util 如果这个值接近百分之百说明 磁盘有瓶颈

net

网络收发(recv  send) 

paging

分页统计,大多数情况下这两个数是 0.

system   

int (interrupt)系统中断次数、csw (context  switch)代表上下文切换次数

load avg

1分钟 平均load ,5分钟平均load  10分钟平均load

查看网络
ethool ech0

Speed: 1000Mb/s   125MB/s 容量 网络容量超过125m 就有问题

  1MB=8Mb

byte是字节数,bit是位数

Mbit 是比特位数

二、iostat   -xm 2  命令 

iostat用于输出CPU和磁盘输入输出、分区、网络文件系统NFS相关的统计信息。iostat命令用于监控系统设备的输入/输出情况,并生成报告,以便根据统计报告修改系统配置,获取更优的性能。

帮助查看瓶颈是不是在磁盘这  重点关注之一 util 磁盘利用率 如果达到百分之百了说明 磁盘已经到最大了,出现瓶颈了

await 代表一次io 在磁盘这的延迟多少毫秒    r/s  w/s  代表每秒读多少次,每秒写多少次


三、vmstat  1   命令 

代表每1秒钟输出vmstat 的信息

swap   si so   有持续不为零 在swap 这存在瓶颈


r 等待执行的任务数,我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 等待IO的进程数量

memory

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小,我的机器内存总共G,剩余1381M。

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用38M,做缓冲区内存

cache cache文件目录系统缓存)做高速缓冲区内存

swap

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

io 读写

bi  bi是从磁盘读的速度

bobo写数据到磁盘的速率

system

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
cpu
us 用户CPU时间,us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了

sy 系统CPU时间,sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wa 等待IO CPU时间。Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

st 从虚拟设备获得的时间

四、top命令  输入完top  按数字1  就出来几核cpu ,进程的情况
Top –p PID H:检查进行下线程CPU消耗


01:06:48    当前时间
up 1:22    系统运行时间,格式为时:分
1 user    当前登录用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s): 
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比
最后两行为内存信息。内容如下:

Mem:
191272k total    物理内存总量
173656k used    使用的物理内存总量
17616k free    空闲内存总量
22052k buffers    用作内核缓存的内存量
Swap: 
192772k total    交换区总量
0k used    使用的交换区总量
192772k free    空闲交换区总量
123988k cached    缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号  列名    含义
a    PID     进程id
b    PPID    父进程id
c    RUSER   Real user name
d    UID     进程所有者的用户id
e    USER    进程所有者的用户名
f    GROUP   进程所有者的组名
g    TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?
h    PR      优先级
i    NI      nice值。负值表示高优先级,正值表示低优先级
j    P       最后使用的CPU,仅在多CPU环境下有意义
k    %CPU    上次更新到现在的CPU时间占用百分比
l    TIME    进程使用的CPU时间总计,单位秒
m    TIME+   进程使用的CPU时间总计,单位1/100秒
n    %MEM    进程使用的物理内存百分比
o    VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p    SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
q    RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r    CODE    可执行代码占用的物理内存大小,单位kb
s    DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t    SHR     共享内存大小,单位kb
u    nFLT    页面错误次数
v    nDRT    最后一次写入到现在,被修改过的页面数。
w    S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x    COMMAND 命令名/命令行
y    WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
z    Flags   任务标志,参考 sched.h

iftop

五、iotop 查看当前系统进程的磁盘读写情况。最后一列代表进程的名字


六、lsof、

七、netstat、

八、Iftop、

JVM监控  jvisualvm  jconsole jstat    jstack  jmap    tprofiler greys

内存溢出out of memory,JVM分为堆内存溢出和perm区内存溢出,堆内存溢出由什么导致的,怎么定位分析。

不断的new 对象,不释放 ,会导致内存溢出

public class Test {
public static void main(String[] args) throws InterruptecException {
for(int i =0; i<1000;i++){

Thread.sleep(1000);
System.out.println(i);
}

}
}
javac Test.java 编译
java Test 


jps -l

JVM原理

heap 堆  perm是不占对内存的

new 的对象  在堆内存里面,先放到Eden区,Eden区是有限的,Eden满了后会进行一次YGC,YGC完了之后,还有存活的对象,引用还没有释放的对象,被移到S0区,S0区满了之后,Eden还往S0区放,这时,S0于S1空间调换,S0把空间都给S1,S0继续接受YGC完之后存活的对象。S0、S1满了,会往Old区里存,同时进行YGC。Old区满了之后,进行FGC一次,整个堆不在接受新new的对象往里存,就相当整个jvm不提供服务了。FGC的花的时 间,尽量要少FGC,第二要尽量让FGC时间短。堆里存的new 的对象

Perm 区存的类。对象分两种,非类的对象,类对象object。Old区满了、 Perm区满了 也会存在FGC。


一、jvisualvm  
找到jdk 的bin目录 用jvisualvm 
监视 线程 visual GC 这三个
进行线程dump  应用线程mian   从最低下看

用命令打dump   ps -l  查看java pid号,jstack 进程号 显示java进程的dump 

jstack 进程号 >jatack.log 就会有日志

输出成一个文件 在log里就有 

简介

VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。

VisualVM 几乎涉及了jvm调优的方方面面。同样是在jdk/bin目录下面双击jvisualvm.exe既可使用,启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数,主界面如下;

VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。

如何安装:

1、从主菜单中选择“工具”>“插件”。
2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
3、逐步完成插件安装程序。

我这里以 Eclipse(pid 22296)为例,双击后直接展开,主界面展示了系统和jvm两大块内容,点击右下方jvm参数和系统属性可以参考详细的参数信息.

因为VisualVM的插件太多,我这里主要介绍三个我主要使用几个:监控、线程、Visual GC

监控的主页其实也就是,cpu、内存、类、线程的图表

线程和jconsole功能没有太大的区别

Visual GC 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。

以上的功能其实jconsole几乎也有,VisualVM更全面更直观一些,另外VisualVM非常多的其它功能,可以分析dump的内存快照,dump出来的线程快照并且进行分析等,还有其它很多的插件大家可以去探索


二、jconsole  

Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。

直接在jdk/bin目录下点击jconsole.exe即可启动,界面如下:

在弹出的框中可以选择本机的监控本机的java应用,也可以选择远程的java服务来监控,如果监控远程服务需要在tomcat启动脚本中添加如下代码:

1
2
3
-Dcom.sun.management.jmxremote.port=6969 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

连接进去之后,就可以看到jconsole概览图和主要的功能:概述、内存、线程、类、VM、MBeans

  • 概述,以图表的方式显示出堆内存使用量,活动线程数,已加载的类,CUP占用率的折线图,可以非常清晰的观察在程序执行过程中的变动情况。

  • 内存,主要展示了内存的使用情况,同时可以查看堆和非堆内存的变化值对比,也可以点击执行GC来处罚GC的执行

  • 线程,主界面展示线程数的活动数和峰值,同时点击左下方线程可以查看线程的详细信息,比如线程的状态是什么,堆栈内容等,同时也可以点击“检测死锁”来检查线程之间是否有死锁的情况。

  • 类,主要展示已加载类的相关信息。
  • VM 概要,展示JVM所有信息总览,包括基本信息、线程相关、堆相关、操作系统、VM参数等。
  • Mbean,查看Mbean的属性,方法等。


三、jstat  -gcutil 进程号 1000       查看gc情况 每一秒显示一次进程号xx 的GC情况 


S0 s1 e 代表yong区

O  老年代 o区

P 持久代

前五列都代表百分比

YGC  代表次数相当计数器  单位是次数

 YGCT 代表YGC 一次花了多少时间  秒

FGC 代表次数相当计数器   单位是次数

FGCT 代表FGC 一次花了多少时间  秒

GCT  GCT=YGCT+FGCT 的时间 单位都是秒

1、O区频繁满了 会产生FGC , 这是系统tps 会骤然下降,过于平凡系统tps 就降为零 ,导致系统挂掉。

2、O区满了 E区满了  不释放

3、O p 区满了 都会产生FGC


写代码 模拟对内存溢出的情况。

jmap 打印实例信息 

out of memory jvm内存溢出分两种:heap堆内存溢出和perm区内存溢出。


Jdk中的bin目录下面 的一些命令

四、jmap 分析内存 打内存dump的
jmap(JVM Memory Map)命令用于生成heap dump文件,如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。 jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等
option参数
-dump : 生成堆转储快照
-finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
-heap : 显示Java堆详细信息
-histo : 显示堆中对象的统计信息
-permstat : to print permanent generation statistics
-F : 当-dump没有响应时,强制生成dump快照

五、 jstack

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

option参数

-F : 当正常输出请求不被响应时,强制输出线程堆栈
-l : 除堆栈外,显示关于锁的附加信息
-m : 如果调用到本地方法的话,可以显示C/C++的堆栈

jstack + java进程号 ,就



数据库监控

redis监控

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值