linux系统调优一


计算机的四个子系统:
 cpu子系统
 内存子系统
 IO子系统(存储设备)
 网络子系统


调整的方向:
 纵向调整:
  在单机的基础上进行调整:
    调整软件,调整软件配置参数,改变运行参数
    调整硬件:更换硬件
 横向调整
  使用更多的机器完成同一个任务---集群


CPU
# cat /proc/cpuinfo
# dmidecode --type processor
# dmidecode --type cache


 中断 --- 设备通知内核,完成一次数据处理过程。
  往往是IO设备产生的,网络设备产生。

 内核处理过程---控制优先级、任务(进程)调度
  
 用户进程
 上下文切换
  内核在做任务调度的时候,调整了任务优先级,这意味着cpu会平凡中断去执行其他优先级更高的程序。


 运行队列(系统负载)uptime

平均负载:
背景1:单核心的cpu
load average: 1.43, 3.43, 5.43
 过去的1分钟、5分钟、15分钟平均负载分别是1.43,3.43,5.43.
 
 以过去的15分钟为例子,表明,在过去的15分钟里,cpu的运行队列平均长度为5.43,也就意味这,平均有5.43个进程在队列中排队等待cpu处理,在5.43个进程中,有一个进程是正在被处理,4.43个进程在等候处理。


背景2:双核心的cpu
load average: 1.43, 3.43, 5.42 
 
 以过去的15分钟为例子,表明,在过去的15分钟里,cpu的运行队列平均长度为5.43,但是由于有两个核心,也就意味着,平均每个核心的cpu有2.71个进程在队列中排队等待cpu处理,在5.43个进程中,有2个进程是正在被处理,3.42个进程在等候处理,平均每个核心有(2.71-1)=1.71个进程在等候处理。


经验:
 每个核心平均负载如果大于等于3(1+2)就应该注意。如果再大的话,说明cpu很忙,有很多进程在排队。

 

 


 cpu利用率
  用户进程us , 用户执行的程序
  内核调度sy , 内核进行调度(处理中断,进行上下文切换)
  空闲 id
  等待io  wa

top - 11:30:05 up  1:19,  5 users,  load average: 0.77, 0.88, 0.70
Tasks: 154 total,   1 running, 152 sleeping,   0 stopped,   1 zombie
Cpu(s): 20.6%us,  0.2%sy,  0.0%ni, 78.9%id,  0.0%wa,  0.2%hi,  0.2%si,  0.0%

 

 vmstat,top,uptime,mpstat,dstat,sar -u / -q


# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1122176  81516 413056    0    0    47    13  573  288 21  1 76  1  0
 0  0      0 1122052  81516 413056    0    0     0     0 1051  399 20  0 81  0  0
 0  0      0 1122300  81516 413088    0    0     0     0 1127  504 19  0 80


与cpu相关的参数输出
procs  --system-- -----cpu------
 r  b  in   cs    us sy id wa st
 0  0  573  288   21  1 76  1  0
 0  0  1051  399  20  0 81  0  0
 0  0  1127  504  19  0 80  0  0

r  ---> running ,就是相当于uptime的负载(运行队列)
  如果是单核心,数字超过3,就应该注意。

b  ---> block ,被阻塞的进程。往往由于进程在等待外部资源。
  一般不应该>0,有的话,一般都说明某个进程由于某种原因被阻塞。就应该去关心一下原因。

in ---> 中断数,中断数越高,一般说明内核在频繁地进行任务调度,但更着重与IO设备产生的中断。
cs ---> 上下文切换 ,数字越高,说明很多个不同的进程之间在竞争cpu资源。

us:sy的百分比应该是 7:3  <---应该花更多cpu资源在用户进程上。

wa  如果数字比较大,一般说明由进程在读写磁盘数据,或者接受网络数据,进程被阻塞
 

跟踪活跃进程
# strace -F -p 3265

跟踪某个准备执行的进程
# strace  -F ping -c 1 www.upl.com


# mpstat -P ALL 2


# sar -u
# sar -q 2 5

=============================================================
 @内存子系统调优
  虚拟内存
  内存页
  内存分页(paging)--内核就必须经常扫描内存空间并且收回其中未被使用的内存页,把数据同步到硬盘
   kswapd
   pdflush 进程负责将内存中的内容和文件系统进行同步操

# free -m
             total       used       free     shared    buffers     cached
Mem:          2001        926       1074          0         86        411
-/+ buffers/cache:        428       1572
Swap:         2047          0       2047

buffers
 主要是缓存磁盘块的数据,文件描述符
cached
 主要是文件系统缓存。

 

  
 vmstat , time , sar -B ,free

# vmstat 2 3
-----------memory---------- ---swap-- -----io----
 swpd   free   buff  cache   si   so    bi    bo
  0  1099740  89324 420868    0    0    13     5
  0  1099368  89324 420868    0    0     0     0
  0  1099400  89324 420868    0    0     0     0

 
si  <--- 从swap读取数据加载到内存(in到内存)
so  <--- 从内存中把数据写到swap(从内存中out出去)

判断内存是否足够,只需要简单地判断是否使用了交换分区,是否频繁使用交换分区。

 
主页面故障
 程序在执行的时候需要的数据在内存中没有直接得到,需要从外设中读取,就算发生主页面故障。

次页面故障
 程序在执行的时候需要的数据在内存中直接得到,不需要从外设中读取,就算发生次页面故障。
 系统总是使用各种缓存,缓冲的技术来减少主页面故障,增加次页面故障。

        Major (requiring I/O) page faults: 0 主页面故障
        Minor (reclaiming a frame) page faults: 222 次页面故障

# procinfo -n 2 可以查看页面调进和调出
  如果大量的page in 和page out 只能说明当前内存使用比较活跃

  如果有大量swap in 和 swap out 说明内存不足

# sar -B 2 3
Linux 2.6.18-274.el5 (www.upl.com)      2012年07月02日

16时03分17秒  pgpgin/s pgpgout/s   fault/s  majflt/s
16时03分19秒      0.00     52.00     25.00      0.00
16时03分21秒      0.00      0.00     13.50      0.00
16时03分23秒      0.00     21.89    183.58      0.00
Average:         0.00     24.63     74.21      0.00

 

 案例数据分析


=====================================
 @IO子系统调优
  
  IOPS计算
   每秒完成的IO数量
  IO吞吐量计算
   单位时间内,平均每个IO完成的数据量
  IO分类
   随机IO
   连续IO 

  磁盘的转速
   scsi 硬盘 320M/s
    10K  IOPS:120-150
    15K  IOPS:150-200

   ssd 固态硬盘 
     
iostat指令
# iostat -k -d sda 2
Linux 2.6.18-274.el5 (www.upl.com)      2012年07月02日

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               2.40        22.11         9.09     492465     202455


tps 过去的时间内平均每秒完成了多少个IO
kB_read/s 平均每秒读取多少KB的数据
kB_read 过去的时间内读取了多少数据

测试某个设备的写入速度:
# mount -o sync /dev/sda8  /mnt

# dd if=/dev/zero of=/mnt/1G  bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 18.8142 seconds, 57.1 MB/s

# iostat -m -d sda8 2
Linux 2.6.18-274.el5 (www.upl.com)      2012年07月02日

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda8             94.50         0.01        45.02          0         90

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda8            125.50         0.00        62.00          0        124

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda8            133.00         0.00        66.00          0        132


# iostat -x -k -d sda 2
Linux 2.6.18-274.el5 (www.upl.com)      2012年07月02日

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.66    25.91  1.68  1.06    21.71   107.89    94.70     0.13   46.32   2.73   0.75

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

rrqm/s 平均每秒合并的读请求
r/s 平均每秒读IO的数量
avgrq-sz 平均每个请求涉及到多少扇区的数据《--IO吞吐量
avgqu-sz 平均IO队列的长度
%util  设备的带宽的使用百分比。数字越高,说明磁盘越尽力去读写数据。

 


  优化手段:分区、块大小,高级文件系统e4fsprogs,文件系统挂载,IO算法


# yum install e4fsprogs.x86_64
# mkfs.ext4  /dev/sda8  

# mkfs.ext4  -b 4096 /dev/sda8


# mount -o noatime /dev/sda8 /web

 

 

你可能感兴趣的:(单机,设备,Processor)