一:应用程序类型:
1:IO消耗型
-- 对系统memory和IO使用率高
-- 关注CPU等待IO的时间
-- 常见的IO型消耗型系统为:数据库系统,文件服务器系统,视频服务器等
2:CPU消耗型
-- 对CPU使用率高
-- 关注CPU中断和上下文切换
-- 常见的CPU消耗型系统为:web服务器系统,复杂计算系统等
二:Linux系统性能分析,调优步骤
1、使用性能监控工具分析系统,找出系统性能瓶颈
2、针对瓶颈部件,进行调优,通常升级该部件能获取较好的性能提升
3、监控调优后的系统性能指标,和之前记录的指标做比较
4、经过对比,确认系统性能是否有提升
三:收集系统遇到的性能问题
通过调查下列问题熟悉并了解系统的性能状况:
1:系统硬件平台
2:系统配置怎么样
3:系统有哪些外围设备
4:系统内核版本
四:熟悉,调查系统碰到的性能问题
1、系统问题描述
2、系统表现的现象是什么,有没有出息什么错误的信息
3、比如:系统拷贝大文件很慢,那么这个暗示着系统瓶颈可能出现的网络,或者磁盘系统上面
4、谁碰到了这个性能问题?
5、是一个人碰到了性能问题,还是一部分人,还是所有人碰到这个问题,这个有助于定位是用户自己的问题,还是网络,部分应用出现了问题
6、找到问题是解决问题的前提
7、问题是发生在特定的时间,还是全天都出现?
8、问题是什么时候开始出现的,是逐渐出现的,还是突然出现的?
9、在问题出现之前,是否对系统进行了什么改动,如果改动,做了什么改动?
10、有没有相关的错误日志信息?
11、该问题的严重程度怎么样?是否必须修复?
12、问题如果修复,影响有多大,代价有多大?
五:CPU性能指标(可以通过top命令查看)
1、CPU utilization #CPU使用率,当超过百分之80,可能是瓶颈
2、user time #系统执行用户进程花费CPU时间的比例,说明系统用在处理用户任何事件的负载情况
3、system time #系统CPU用在处理内核操作上的时间,这个比例应该很少,如果过大,说明系统都在处理内核任务了,那么处理用户真正的任何事件就要少了 --一般少于百分之五
4、waiting #用户用在等待磁盘操作的时间,系统不应该花费很多时间在等待磁盘操作上面,否则,磁盘可能是系统的瓶颈,一般为百分之0
5、idle time #CPU的空闲时间比例,一般大于百分之20
6、load average #CPU运行队列的平均负载,一般少于1
7、runable processes #准备执行的进程数量,一般是:1-1(一个CPU就一个进程数量),2-2,3-3
----每个核心正常在1到3个左右
8、blocked #等待磁盘操作的进程数量,可以用来判断磁盘是有时瓶颈
9、context swich #进程切换的次数,过高,说明系统存在大量的中断,考虑磁盘或者网络的瓶颈问题(vmstat命令查看)
10、CPU高负载的时候,常见指标
1、65%-70% user time
2、30%-35% system time
3、0%-5% idle time
六:CPU性能瓶颈定位
1、当一个系统的CPU空闲时间或者等待时间小于5%时,我们就认为系统的CPU资源耗尽,我们应该对CPU进行性能调整
2、uptime命令显示出load average长期大于1,说明在队列中等待执行的进程数目多,说明CPU可能存在处理能力不足的问题
3、vmstat 命令r列表示运行和等待CPU时间片的进程数如果长期大于1,说明CPU不足,需要增加CPU,us列比较高,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化用户程序,如果us+sy大于80%,说明可能存在cpu不足,wa列显示了磁盘等待占用的cpu时间,如果wa长期大于30%,说明I/O等待严重,磁盘可能存在瓶颈。
七:CPU性能调优参考
1:关闭不必要的进程
1、关闭不必要的进程,对于一些非常紧急任务,可以使用cron安排在系统负荷较轻的时候运行
2、使用命令ps -df查看系统进程信息,找到不需要的进程,把它关闭。
2:调整进程的运行级别(这个方法一般很少使用,除非你需要的进程运行需要很高的优先级)
1、调整非紧急进程的运行级别
2、nice -n -5 abc #启动abc程序,并把运行级别调整到-5(数字越小,优先级越高,区间为-20到19,默认级别是0)
3、renice -5 12345 #重新调整进程号为12345的进程运行级别为-5
3:把进程绑定到特定的CPU
1、把关键进程绑定到特定的CPU,减少CPU中进程切换的频率
2、在进程目录/proc/irq/pid/目录下面,修改文件smp_affinity文件,把进程绑定到特定的CPU
八:推荐两本书
1、Unix高级环境编程
2、socket网络编程