今天给大家分享一个知识点,就是如果我们线上服务器部署的Java系统性能不是很好好的,我应该如何登录?在线服务器,然后使用top命令分析在线系统的性能?下面我们一步步为大家讲解top命令的使用方法。在线系统如何运作?首先,在讲解top命令的使用技巧之前,我们得先给大家介绍一些基础知识,就是在线系统在服务器上运行的时候,他会需要使用哪些资源,或者说,他服务器需要用到什么硬件?首先你要知道,我们在网上运行的系统,本质上是一个Linux进程,也就是一个JVM进程。这个JVM进程其实会开启多个线程,每个线程都会交给CPU去运行。这个CPU是我们的关键硬件。CPU在运行我们的线程的同时,当然也会运行线程负责执行的那部分代码。如下图所示:CPU如何并发运行多个线程?但是这个CPU运行多个线程只有一件事。很多人可能不知道的是,现代服务器有多个CPU,或者说一个CPU有多个内核。所以,我们要弄清楚一个CPU是多核的,所以你一个cpu核并发多线程,和多个cpu核同时跑多线程,是不一样的。这个一个cpu核心同时运行多个线程。其实他并不是说同时运行多个线程,而是快速切换运行每个线程。这是什么意思?也就是说,你的cpu核心会先运行线程A,执行一会儿它的代码,然后马上切换到运行线程B,运行一会儿它的代码,然后快速切换到运行线程C。只是切换速度很快,给人一种cpu核心可以同时运行多个线程的错觉,其实不然。如下图所示:如果有多个cpu核怎么办?这时候每个cpu核其实可以运行一个线程。如果你有多个cpu核同时运行多个线程,那才是真正的同步,因为每个cpu核都可以独立运行一个线程的代码。如下图所示:线程过多会有什么后果?所以,很多时候并不是说线程越多越好,很多兄弟对于线上系统往往会犯一个错误,就是认为让系统同时跑上百个或者上千个线程就可以处理高并发的请求起来了。事实上,它根本不是。如果线程太多,会导致每个cpu核心频繁切换运行n个多线程。每次线程切换都有时间开销。如果线程太多,会导致每个线程运行一段时间,然后又需要一段时间才能再次运行。为什么?因为线程太多,cpu核心需要运行每个线程,雨露均匀。如下图所示:上图非常明显。当你有一个请求时,它被交给一个线程来处理。该线程刚刚获得了cpu运行机会。运行了一段时间,并没有处理完请求。他们切换到执行其他线程,你必须运行很多其他线程才能切换回运行你的线程。您运行请求需要很长时间吗?所以,一般来说,我们的经验是,在线业务系统接入MySQL数据库时,一台4核CPU的机器往往开启200个业务线程处理请求,每秒处理1000个线程左右,差不多。因为如果你请求多了,线程多了,4个cpu核心就忙不过来了。你经常听到的CPU使用率和负载到底是什么?所以这里我给大家介绍另外一个概念,就是CPU使用率和负载。CPU占用率大家都很好理解。CPU占用率越高,说明CPU几乎没有空闲,一直在拼命运行。负载也是如此。负载越高,CPU越忙。如果CPU使用率和负载过高,尤其是使用率超过90%,往往意味着你的系统负载压力过大。这时候你的表现就会下降。因为你的任何一个请求来了,繁忙的CPU要做很多事情,他留给你处理这个请求的机会可能就少了,导致你要等一段时间才能处理这个请求,所以系统性能难免会受到影响。减少。如下图所示:如何通过top命令查看CPU使用率和负载?因此,如果线上服务器的系统性能不好,往往我们第一步先登录线上服务器,使用top命令查看当前服务器的CPU占用率和负载是否过高。如果太高,说明你现在的系统压力太大了,CPU太忙了,导致请求来了之后,运行起来就慢了,性能自然就下降了。当然,如果你的公司有可视化监控系统,可以直接看到线上服务器的CPU负载和使用率,那也没问题,我们一起来看看top命令吧。这里我用我的mac电脑执行top命令,会得到如下截图:让我们看看top命令的输出结果是什么。有很多东西,但我们可以只挑重要的东西看。刚才一开始输出的Processes就是当前机器上的进程情况。会有运行进程数、休眠进程数,以及你的进程打开的线程总数。比如我的电脑有387个进程,只有2个在运行,385个在休眠。,共有3834个线程。然后LoadAvg和CPUUsage比较重要,我们可以关注CPUUsage。他的意思是我们的CPU使用率最多应该在80%左右。如果超过90%,甚至超过100%,就非常危险了。比如我的电脑负载很低,使用率很低。仅1%~2%,闲置率达90%以上。那么PhysMem是指服务器的内存使用了多少GB,NetWorks是指通过网络输入输出的数据量,Disks是指写入和读取磁盘文件的数据量,然后就是当前的列表运行的主要进程,显示各进程对CPU等资源的消耗情况。好了,今天的知识点到此结束,重点讲解CPU对系统性能的影响,以及如何通过top命令查看服务器的CPU使用率和负载。
