,今天给大家分享一个知识点,就是平时我们线上服务器部署的 Java 系统如果发现要是性能不太好,此时应该如何登录到线上服务器,接着用 top 命令去分析线上系统的性能呢?下面我们就来一步一步给大家讲解一下 top 命令的使用技巧。,首先,在讲解 top 命令的使用技巧之前,我们先得给大家铺垫一些基础的知识,就是关于线上系统在服务器上运行的时候,他会需要使用哪些资源,或者换句话说,他会需要使用到服务器的哪些硬件呢?,首当其中的,大家必须知道一个事儿,就是我们线上运行的系统,他的本质其实就是一个 Linux 进程,也就就是 JVM 进程,这个 JVM 进程实际上会开启多个线程,每个线程都会交给 CPU 来运行。,这个 CPU 就是我们很关键的一个硬件,CPU 在运行我们的线程的同时,当然也会运行线程负责执行的那部分代码了。,如下图:,
,但是单单是这个 CPU 运行多个线程的事儿就有的一说,可能很多人不知道的是,现代服务器都是有多个 CPU 的,或者说一个 CPU 是有多个核的。,所以说,我们要搞清楚,一个 CPU 是有多个 cores 的,所以你的一个 cpu core 并发运行多个线程,以及多个 cpu core 同时运行多个线程,是不太一样的。,这个一个 cpu core 并发运行多个线程,实际上他不是说同时运行多个线程,而是快速的切换运行每一个线程,什么意思呢?,就是说,你这个 cpu core 会先运行一下线程 A,执行一小会儿他的代码,再立刻切换去运行线程 B,运行一小会儿他的代码再快速的切换过去运行线程 C。,他只不过是切换的速度非常快,让你有一种错觉,一个 cpu core 可以同时运行多个线程一样,其实并不是。,如下图:,
,那如果是有多个 cpu core 呢?这个时候其实每个 cpu core 都可以运行一个线程了,如果你有多个 cpu core 同时运行多个线程,那就是真正的同时了,因为每个 cpu core 都可以自己独立运行一个线程的代码。,如下图:,
,所以说,很多时候,其实并不是说线程越多越好的,很多兄弟往往对线上系统会犯一个错误,那就是以为让系统同时运行几百几千个线程,就可以高并发的处理请求了。,其实根本不是,如果你要是线程太多了,会导致每个 cpu core 要频繁的切换来切换去的运行 n 多线程。,每次线程切换都是有时间开销的,如果线程太多了,反而会导致每个线程被运行了一小会儿以后,接着要过一段时间才能被再次运行,为什么?因为线程太多了啊,cpu core 要给每个线程都运行一下,雨露均沾。,如下图:,
,上面这个图就很明显,你一个请求来了,是交给一个线程来处理的,这个线程刚得到 cpu 运行机会,跑了一小会儿没处理完请求呢,人家切换去执行别的线程了,而且还得运行很多别的线程,最后才能切换回来运行你这个线程,那你一个请求运行是不是要等挺久才能跑完的?,所以说,一般我们的经验是,线上业务系统连接 MySQL 数据库的这种情况,往往 4 个 cpu core 的机器,开启 200 个业务线程处理请求,大概每秒处理 1000 左右的线程,就差不多了,因为你要是请求再多,线程再多,4 个 cpu core 就忙不过来了。,所以这里给大家再引入一个概念,就是 CPU 使用率和负载,CPU 使用率这个大家很好理解,CPU 使用率越高,就说明 CPU 几乎没闲着,一直在拼命的运转。,负载也是同理,负载越高,说明 CPU 越是繁忙,如果要是 CPU 使用率和负载过于高,尤其是使用率,超过 90% 的时候,往往说明你的系统负载压力就太大了,这个时候你的性能是会下降的。,因为你任何一个请求过来,繁忙的 CPU 要干好多好多事情,他可能留给你这个请求的处理机会就比较少,导致你这个请求就得等待一段时间才能处理完毕,所以系统性能也就必然会下降了。,如下图:,
,因此如果线上服务器运行的系统性能不好的时候,往往我们第一步就是可以登录到线上服务器去通过 top 命令看一看当前服务器的 CPU 使用率和负载是不是过高了。,如果过高了,那么说明你当前系统压力过大,CPU 过于繁忙,导致请求过来以后运行的比较慢,性能自然就下来了。,当然,如果你们公司要是有可视化监控系统,直接就可以看到线上服务器的 CPU 负载和使用率,那也是没问题的,接着一起来看看 top 命令吧。,这里我用自己的 mac 电脑执行了 top 命令,会得到如下的截图:,
,咱们一起来看一看这个 top 命令的输出结果里都有什么,东西很多,但是我们挑选重要的东西来看就行了,刚开始他输出的 Processes 是说当前机器上的进程情况。,这里会有在运行中的进程数量,以及在休眠中的进程,还有你的进程开启的线程总数量,比如我的电脑里有 387 个进程,就 2 个在运行,385 个都是在休眠,一共有 3834 个线程。,接着 Load Avg 和 CPU Usage 是比较重要的,我们可以重点看 CPU Usage 就可以了。,他意思就是说我们的 CPU 使用率,这个使用率一般是应该在最高在 80% 左右,如果到 90% 以上,甚至超过 100%,那就很危险了,像我的电脑负载很低,使用率就 1%~2%,空闲率在 90% 多。,接着 PhysMem 说的是服务器的内存被使用了多少 GB,NetWorks 说的是通过网络输入和输出的数据量,Disks 说的是对磁盘文件写入和读取的数据量有多少,然后下面还有当前运行的主要进程列表,每个进程对 CPU 等资源的消耗都有显示。,好了,今天的知识点就到这里了,重点是给大家讲解了 CPU 对系统性能的影响,以及如何通过 top 命令查看服务器的 CPU 使用率和负载情况。
© 版权声明
文章版权归作者所有,未经允许请勿转载。