性能优化专题(一)Linux性能维度排查

目录

1. 性能优化是什么?

2. 性能的个唯度

3. 术语

4. CPU占用过高排查

现象重现

定位方法

5. Memory内存查看

6. IO读写查看

7. Network网络


1. 性能优化是什么?

性能优化就是发挥机器本来的性能

2. 性能的个唯度

  • CPU
  • Memory
  • IO
  • network 网络

3. 术语

  • 吞吐量:对单位时间内完成的工作量的度量
  • 平均响应时间:提交请求和返回该请求的响应之间使用的时间
  • TPS: Transactions per Second(每秒的事务请求数)
  • QPS: Queries per Second(每秒的查询请求数)

平均响应时间越短,系统吞吐量越大

平均响应时间越长,系统吞吐量越小

但是,系统吞吐量越大,未必平均响应时间越短;因为在某些情况(例如,不增加任何硬件配置)吞吐量的增大,有时会把平均响应时间作为牺牲,来换取一段时间处理更多的请求

4. CPU占用过高排查

现象重现

CPU占用过高一般情况是代码中出现了循环调用,最容易出现的情况有几种:

  • 递归调用,退出机制设计的不够合理;
  • 定时器启动过频繁;
  • 代码出现死循环

GC频繁也可能导致CPU占用过高

我用最简单的死循环来举例:

while (true){
        ...
}

执行后用 top 命令查看系统情况

这个时候可以看到pid 21270 的进程 cpu占用率为100%

这里有一个小细节,就是总体cpu占用率却为6.8

原因是服务器为多核的,而示例代码为单线程,只会一直占用其中一核

在top命令下,按【1】查看每个CPU的详细数据

假如在while 里面不断创建线程就会把整个CPU占满

while (true){
    Thread thread = new Thread(new MyRunnable());
    thread.start();
}

定位方法

首先可以确定占用CPU的进程pid为21270

然后按shift + h 可以切换成tid(线程id)

可以看到占用cpu的tid为21318

也可以用命令# top -H -p 21270 说明: -H 指显示线程,-p 是指定进程

或者用命令ps -mp 21270 -o THREAD,tid,time 查看pid为21270的线程

 

再将得到的tid转换成16进制

printf %x 21318 得到 5346

执行

jstack -l pid > test.txt

得到线程信息

然后再在test.txt中查找5346会看到一个nid=ox5346的异常信息

可通过vi/vim进入命令模式,从上往下查找,比如:/5346

这里可以很清晰的看到是TestController类的28行有问题(此处是一个死循环),以上是一次代码导致cpu占用过高的问题排查过程,GC过于频繁也会导致CPU占用过高

5. Memory内存查看

使用 free -g 查看当前内存占用情况

代表有3个G的内存空间,2个G的free,其中buffers是优化我们机器读写操作,是用来承接写的一个一个块(IO读写消耗大),读用的就是cached,二者都是为了提升读写速度

使用 top 查看当前进程内存占用情况

查看 %MEM 指标,当内存很大的时候,我们就要关注项目的业务内存占用了

6. IO读写查看

使用 iostat -dx 1 查看每秒的IO请求

关键的是%util,12.2%相当于是1秒的12.2%的时候在做IO,通常%utils是很小的,svctm代表是功能用了多久,await是执行等待的时间,若一直读写的时候是会一直增长。若是定位问题的话,只能从业务层面去定位。并不能像CPU那样定位代码

7. Network网络

命令 nicstat (需要安装)

安装步骤如下:

wget http://sourceforge.net/projects/nicstat/files/nicstat-1.92.tar.gz
tar -zxvf nicstat-1.92.tar.gz
sudo vim Makefile
CFLAGS = $(COPT) -m32#将此行修改为如下:
CFLAGS = $(COPT)
sudo make -f Makefile install

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值