系统性能分析因素 ====================== CPU ----------------------- CPU在操作系统中是运行的根本,CPU的执行速度与性能好坏在很大程度上决定了系统整体的性能的快慢,最开始大部分任务都是单线程调度,CPU在同一时间内只能运行一个线程,但随着多处理器技术的成熟,软件架构的深入和复杂度的提升,单处理器系统逐渐在往多处理器系统转变,这些都是利用处理器的多核心处理能力的特性来提升系统性能。在做系统性能分析前,首先我们要了解系统处理器的情况,如逻辑处理器、处理器型号、主频率、cache大小、是否支持超线程技术等信息,在知道这些的情况下,才能更好地进行我们系统的性能分析。 除此之外,目前而言,CPU的使用率也是我们需要关注的很重要的指标,当CPU处于满负载状态时,很多时候我们要结合系统附带的一些监控分析工具,检查相关的系统日志,web服务器应用日志,DB日志等,结合辅助的一些命令如top,free、uptime、sar等辅助分析为什么系统CPU会被完全占用,以及后续的解决优化方法等。 Java程序我们可以通过JVM自带的命令工具(jstat,jmap,Jvisualvm,JConsole)来分析,MysQL我们可通过数据库监控工具(Spotlight、Monyog、及命令行工具)来分析,以及考虑是否需要做负载均衡或者加强机器性能。 内存 -------------------------- 在系统性能因素中,内存的大小也是影响系统性能的一个非常核心的指标。当可用的内存太小,系统进程会被阻塞中,应用也将会变得非常缓慢,有时候会失去响应,严重的甚至可能会触发系统的OOM(内存溢出)从而引起应用程序被系统给杀死,更严重的情况可能缓存服务器去提升系统性能。 关于内存的分析,一般情况下我们希望内存一定要足够大尤其是现在基本内存大部分都是8G以上的,但假如我们的系统是32位处理器的操作系统由于系统在32位的系统寻址范围有限,会导致系统无法使用那么“大”的内存。这也是为么现在大部分服务器会使用64位操作系统的原因。64位的系统没有这类问题。 虚拟内存也是在内存里面我们需要考虑的性能指标,在系统的设计中,当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时呈存到虚拟内存空间中,等到那些程序要运行时,再从虚拟内存中恢复保存的数据到物理内中。 这样,系统总是在物理内存不够时,才进行内存之间的交换。有时可以越过系统性能颈,节省系统升级费用。在做性能分析的时候,我们也要考虑系统有无设置虚拟内存,以虚拟内存的使用情况。就虚拟内存的设定而言,因为以前的系统内存普遍偏小,所以有很数据会建议是物理内存的两倍,但随着物理内存的增大。很多服务器的RAM已经可以64GB,128GB的时候,虚拟内存再设置成它的两倍就有点浪费磁盘空间了。 网络 -------------------------------- 系统应用之间的交互,尤其是跨机器之间的,都是要基于网络的,因此网络带宽、哪时间、网络延迟,阻塞等都是影响系统性能的因素。假如应用在不稳定、不安全的网络下会导致应用程序的超时、丢弃、阻塞、波动率大,这些在系统中都是不能接受的。我们需受个可靠的、稳定的、能满足我们的应用程序在机器A-B之前畅通无阻地运行。这些需要测工程师、网络管理员、系统管理员等一起合作把系统的网络完善。 在系统中,我们要考虑对应的网络是否可达、防火墙是否开启、端口的访问、带室是否有被限制、路由的寻址、网络的时延等问题。 I/O ---------------------------------- 访问应用离不开系统的磁盘数据的读写, I/O读写的性能直接会影响系统程序的性能,磁盘I/O系统是系统中最慢的部分。主要是CPU处理频率较磁盘的物理操作快几个数量级,如果拿读取磁盘和内存的时间作比较就是分钟级到毫秒的区别。I/O比较频繁的(读或者写)时候,如果I/O得不到满足就会导致应用的阻塞。针对I/O的场景模型<我们要考虑的有I/O的TPS,平均I/O数据、平均队列长度、平均服务时间、平均等待时间、I/O利用率(磁盘Busy Time%)等指标。