CPU使用率能够分为用户态CPU使用率和系统态CPU使用率。
用户态CPU使用率:应用程序代码所执行的时间占CPU总执行时间的百分比。
系统态CPU使用率:应用程序调用操做系统代码所执行的时间占CPU总时间的百分比。若是较高,说明有共享资源的竞争或者大量IO交互操做。 减小系统态CPU使用率,将CPU更多的执行时间分配到应用程序自己,能够提升应用性能。
PS:要提高性能,除了CPU使用率,还要监控单位时间内执行的指令数、每条执行所需的周期等,防止等待状态也被当成了高效执行。java
使用任务管理器进行监控。
左上角是CPU使用率总和,右上角是每一个CPU的使用率,绿色表明每一个CPU使用率,红色表明每一个CPU的系统态使用率,先后二者的差表明用户态使用率。算法
CPU调度程序运行队列就是那些已经准备好运行、正在等待可用CPU来执行他们的线程。
虚拟处理器个数= Runtime.getRuntime().availableProcessors()
当队列长度达到虚拟处理器个数的3-4倍时,就须要注意或者进行优化了。
对于上述状况有两种解决措施:缓存
采用性能监视器来处理
用图形中显示的数值(0-100)除以比例10.0就是队列的长度。性能优化
除了CPU,内存相关属性也会影响性能。如页面调度或页面交换、加锁、线程切换
页面交换:当执行应用程序所须要的内存超过可用物理内存时,就会发生页面交换。具体步骤为将应用程序中最少运行的部分腾出来,置换到磁盘上。若是要访问这部分程序,就须要再将它从磁盘置换到内存。这个步骤很是影响性能。网络
命令typeperf –si 5 "\Memory\Available Mbytes" "\Memory\Pages/sec"(其中-si 5表示每隔5秒打印一次) 第一列为时间戳,第二列为可用内存,第三列为每秒页面调度
若是有页面调度,那么可能系统在进行页面交换。若是有页面调度,但内存充足而且系统没有页面交换的时候,说明有应用正在启动。数据结构
### 总述 分布式java应用的性能和扩展性受到网络带宽和网络I/O性能的影响。若是发送到系统的网络请求太多,系统会排队处理,并致使阻塞,这样会产生延迟。框架
在任务管理器中 socket
磁盘I/O性能提高的策略:分布式
减小磁盘I/O的同时也就减小了应用和系统打交道的次数,也就减小了系统态CPU使用率,也就提高了性能。一般使用办法就是利用缓存来处理IO,从而提高性能。性能