日期:2014-05-16  浏览次数:20619 次

总结服务器支撑技术(Linux)

如何解决负载均衡,首先需要找到问题短原因,这里总结几点:

第一:不要推测,要测量。要想把服务器的性能发挥到极致,首先要正确掌握服务器资源短使用状况。

第二:如何寻找瓶颈点,分为两个步骤(查看平均负载和确认CPU、I/O有无瓶颈

   第一步查看负载就是用top、uptime等命令显示平均负载

   第二步查看CPU和I/O瓶颈,通过sar或者vmstat命令来查看(一般分为计算密集型和I/O密集型)

   CPU负载个人认为一种是计算导致,一种就是线程死锁导致,前者属于业务逻辑处理问题,后者是线程安全问题

   I/O比较简单就是是否有过多的I/O请求,或者是频繁的磁盘交换(程序是否利用到操作系统的缓存机制)

当是单CPU的时候,操作系统其实是共享CPU的方式达到看似在同时执行多个任务,内部是在极短的时间内切换多个任务并执行处理。

其中top命令的输出:load average(平均负载) 

    load average:0.70, 0.66, 0.59

平均负载从左到右分别是1分钟、5分钟、15分钟内,单位时间中处于等待状态短任务数

平均负载揭示的实际负载状况,它是两种负载综合的结果,单凭数字是无法判断是CPU负载高还是I/O负载高。最终需要更细致的调查

就是通过sar查看CPU的使用率和I/O等待率

sar -P 可以查看多个CPU的使用情况,

命令行如下;

sar -P ALL | head -13 或者 sar -P ALL | head


linux只要有空闲内存,就会全部缓存。这一点没有任何限制,命令sar -r l表示每秒输出一次当前的内存状态。命令的输出结果

中kdcached即为用于缓存的容量,memused表示内存的使用量,

例如kdcached值为694088,memused值为99.71,要是不知道页面缓存原理,会误认为我的电脑内存完全不够用啊,其实有接近700多MB的缓存。

增加内存其实就是降低了I/O负载,主要是sar命令的结果中iowait这个指标进行观察,当加大内存后,会很明显降低I/O的等待时间


sar有两种用法;

追溯过去的统计数据(默认)

周期性地查看当前数据

例如:sar 1 3表示一秒一次,过3次

sar -f /var/log/sa/sa05 表示读取指定目录下的日志文件

下面简单总结下sar的命令用法

sar -u 查看CPU的使用率(也是默认的显示方式)结果中的各列指标信息说明如下:

   %user 用户模式下消耗的CPU时间的比例

   %nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例

   %system系统模式下消耗CPU时间的比例

   %iowait CPU等待磁盘I/O而导致空闲状态消耗时间的比例

   %steal 利用Xen等操作系统虚拟化技术时,等待其他虚拟CPU计算占用的时间比例

   %idle CPU没有等待磁盘I/O等的空闲状态消耗的时间比咧

在考虑负载均衡时,user/system/iowait/idle值是重要的指标

sar -q 查看平均负载,能查看到运行队列中的进程数、系统上的进程大小、平均负载值(1分钟、5分钟、15分钟)

sar -r ?查看内存使用情况,结果各列说明:

   kbmemfree: 空闲物理内存量

? ? ? ? ? ? kbmemused: 使用中的物理内存量

? ? ? ? ? ? %memused: 物理内存使用率

? ? ? ? ? ? kbbuffers: 内核中作为缓冲区使用的物理内存容量

? ? ? ? ? ? kbcached: 内核中作为缓存使用的物理内存容量

? ? ? ? ? ? kbswpfree: 交换区的空闲容量

? ? ? ? ? ? kbswpused: 使用中的交换区容量

sar -W 查看页面交换发生状况,结果各列说明:

   pswpin/s 表示1秒内的换入页面数

   pswpout/s 正好相反,为换出页面数

   当出现频繁的页面交换时,服务器的吞吐量就会大幅下降。

这里做个小的总结就是Linux的页面缓存行为,要记住”只要可能,Linu