linux的性能调优

单机调优:

分析性能瓶颈的原因,解决它。

cpu子系统

内存子系统

IO子系统

网络系统

@cpu子系统调优

cpu技术指标 xeon E5520 2.27GHz 8192kb

# cat /proc/cpuinfo

# dmidecode

# dmidecode --type cache

# dmidecode --type processor

中断 --- 某个事件发生,cpu停止执行当前指令,转而执行引起该事件的程序产生的指令,执行完毕,恢复执行之前被暂停的指令。 IO引起(存储设备、网络传输)

上下文切换

内核处理过程---控制优先级

内核除了调用各种驱动程序,完成对硬件的驱动

对系统各种资源的调配:

硬件资源

调整各个进程的优先级,对进行进行调度。

完成以上任务的也是由相应的进程完成,这些进程称为系统进程(内核进程)

用户进程

运行队列(系统负载)uptime

# uptime

14:24:16 up 4:20, 5 users, load average: 0.06, 0.09, 0.18

1分钟,5分钟,15分钟

负载,代表就是系统过去的压力,数字越大,说明系统越忙。

负载就是代表运行队列的平均长度。如果数字越大,说明排队等候cpu处理的进程就越多。

单核cpu:

4 过去的时间里,运行队列里平均长度是4。(事实上3个进程在等候,1个进程正在被cpu处理)。也就是说,负载是4.

一般一个核心的cpu它的负载(运行队列)不应该大于3.

双核cpu:

4 过去的时间里,平均每个核心的cpu运行队列里长度是4/2=2。

因为平均下载,都比常用指标3要低,所以系统不繁忙。

cpu利用率

用户进程us , 用户执行的程序

内核调度sy , 内核进行调度(处理中断,进行上下文切换)

空闲 id

等待io wa

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

# top

可以交互界面下,动态查看负载,系统的进程等信息。

在查找性能瓶颈的时候,主要用它来查看当前哪些进程最活跃。最活跃进程通常都是占用资源最多的进程。

shift + M 以内存使用百分比排序

shift + P 以cpu使用百分比排序

# vmstat 2 <---每2秒中输出一次最新的数据。

# vmstat 2 3 <---只输出3次数据

procs --system-- -----cpu-----

r b in cs us sy id wa st

0 0 728 913 29 2 68 0 0

0 0 301 255 2 1 98 0 0

0 0 472 569 1 1 98 0 0

r 当前运行队列中有多少个进程(uptime看到的负载)

b 被阻塞进程有多少个,只要看到数字,都应该留意,一般被阻塞的进程都是由于IO导致。

in 中断数 , 数字越大,说明操作系统越活跃,操作系统在充分发挥它该做的事情。

cs 上下文切换数, 数字越大,说明操作系统越活跃,操作系统在充分发挥它该做的事情。

us 用户进程使用的cpu百分比

sy 内核进程使用的cpu百分比

us : sy = 7 : 3

id 空间的cpu百分比

wa cpu花在等待的时间的备份比。一般产生wa时间都是由于某个进程被阻塞了,在慢设备上读写数据,然后让cpu被迫停止等待指令执行完毕。

一直都出现wa时间,就应该注意。

# mpstat -p ALL <---分别查看每个核心的使用情况

# yum install sysstat -y

# sar -u <---输出过去24小时内sar -u每10分钟捕获一次历史数据。

# sar -u 2

# sar -q 2

案例数据分析

===================================================================

@内存子系统调优

虚拟内存

内存页 page

作为系统分配内存空间的最基本的单位。内核默认的内存也多大?

内存分页(paging)--内核就必须经常扫描内存空间并且收回其中未被使用的内存页,把数据同步到硬盘

kswapd

pdflush 进程负责将内存中的内容和文件系统进行同步操

# free -m

total used free shared buffers cached

Mem: 3925 2114 1810 0 109 1461

-/+ buffers/cache: 543 3381

Swap: 4095 0 4095

buffers

缓冲区,用于缓存块设备的数据。这些数据是不经过文件系统的数据。

cached

高速缓存,用于缓存文件系统的数据。默认情况下,Linux在内存空间允许的情况下,把曾经打开过的文件都缓存到这里。

如果放在内存中的数据被修改过了,这些数据叫做“脏数据”。pdflush 进程定期扫描内存中的脏数据,把脏数据同步到磁盘上。同步之后的数据,叫做干净数据。

如果出现内存空间不足的时候,就会把脏数据马上同步到磁盘,把同步后的数据,从内存中删除掉。

如果内存中的数据并不是来自磁盘,而是进程在运行过程中产生,如果遇到内存空间不足的时候,而这部分数据当前不许要马上使用,就会被置换到swap分区。

# 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 1849492 112304 1500544 0 0 48 18 644 751 23 2 75 0 0

0 0 0 1848020 112312 1501792 0 0 0 12 1248 813 3 1 95 1 0

0 0 0 1851492 112312 1498248 0 0 0 0 707 392 1 0 99 0 0

si 有多少数据从swap加载到内存中 (page in)

so 有多少数据从内存中保存到swap中 (page out)

swpd 使用了多少的swap分区空间

如果发现某个系统是存在内存瓶颈,想知道哪个进程使用了大量的内存,使用top指令查看最活跃的进程,或者按内存使用百分比输出结果。

找到这个进程之后,就可以使用strace去跟踪进程,看一下进程到底在调用什么的系统函数,结合进程本身作用,推断出进程背后在做些什么?

例如: 如果现在系统出现性能瓶颈,top指令发现mysqld进程最活跃》

# strace -F -p 2234 <--- 2234是mysqld进程pid

主页面故障:

程序运行的时候所需要的数据并不在内存中,就会产生主页面故障。

次页面故障

程序运行的时候所需要的数据已经在内存中,就会产生次页面故障。

vmstat , time , sar -B ,free

# /usr/bin/time -v date

2012年 12月 28日 星期五 16:29:28 CST

...

Major (requiring I/O) page faults: 0 主页面故障

Minor (reclaiming a frame) page faults: 234 次页面故障

...

Page size (bytes): 4096

# sar -B 2

=================================================================

@IO子系统调优

IO 输入输出(写读硬盘)

IOPS计算

IOPS 每秒钟完成多少个IO指令。越多就越好。

在最好发挥硬盘性能的条件下去测试的:

10K 120-150 IOPS

15K 150-200 IOPS

IO吞吐量计算

每个IO指令完成了多少的数据。 数字越大,代表设备性能越好。

IO分类

随机IO

顺序IO

iostat

# iostat -d sda2 2

Linux 2.6.32-220.el6.x86_64 (www.upl.com) 2012年12月28日 _x86_64_ (2 CPU)

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda2 3.21 127.32 22.67 3079282 548200 <---开机到现在的平均数据

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda2 0.00 0.00 0.00 0 0 <--过去2秒钟的平均数据

tps 平均每秒钟发生的事务数(IO) = IOPS

Blk_read/s 平均每秒中读取了多少块数据。 1块=1扇区=512字节

Blk_read 过去2秒钟中读取了多少块的数据

# iostat -d sda2 2 -k

Linux 2.6.32-220.el6.x86_64 (www.upl.com) 2012年12月28日 _x86_64_ (2 CPU)

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda2 3.20 63.13 11.39 1539641 277756

-k 以KB 单位输出

-m 以MB 为单位输出

测试设备的读写性能,以下是顺序IO的测试结果:

# mount -o remount,sync /dev/sda6

# dd if=/dev/zero of=/rhci/1Gb bs=1M count=1024

记录了1024+0 的读入

记录了1024+0 的写出

1073741824字节(1.1 GB)已复制,55.7702 秒,19.3 MB/秒

# iostat -m -d sda6 2

Linux 2.6.32-220.el6.x86_64 (www.upl.com) 2012年12月28日 _x86_64_ (2 CPU)

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

sda6 0.94 0.00 0.06 3 1397

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

sda6 326.00 0.12 18.36 0 36

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

sda6 360.00 0.00 20.47 0 40

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

sda6 306.00 0.00 17.40 0 34

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

sda6 332.50 0.00 18.93 0 37

数据 ---ext4驱动---> sda6

不经过文件系统,直接写快设备:非常危险,注意!!

以下实验中的/dev/sda7是没有重要数据,里面的数据测试后会被彻底损坏。

# dd if=/dev/zero of=/dev/sda7 bs=1M count=1024

记录了1024+0 的读入

记录了1024+0 的写出

1073741824字节(1.1 GB)已复制,12.0819 秒,88.9 MB/秒

数据---> sda7

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

分区

1k 80KB 就需要分配80次

4k 80KB 只需要分配20次

# mkfs.ext4 -b 4096 /dev/sda8

rhel5 为了实用性能更好的文件系统ext4,可以安装软件包:e4fsprogs

noatime 不更新文件的访问时间。

# mount -o noatime /dev/sda8 /webroot

noacl 不许要的功能可以去掉。

1eb --1024PB ---> -- 1024*1024TB ---> 1024*1024*1024GB

16TB

IO算法

# cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]

临时生效:

# echo "deadline" > /sys/block/sda/queue/scheduler

cfq 完全公平的算法。内核会给每个程序单独维护一个IO队列,每次都从每个队列中取出部分IO指令执行。

deadline 在更多的时间内完成更多的IO。有可能出现不公平的现象。主要用于功能单一的环境。例如: 这是一台仅仅作为web服务用的服务器,那么就可以使用deadline.

anticipatory 预读算法。主要适合那种老式的非常慢的设备。是旧内核的默认算法。每执行玩一个IO或者一系列IO后,会花2ms的时间去预测下次IO到底会发生在哪个地方,事先把猜测的数据读取了。

noop 不使用任何算法。 所有进程共用一个IO队列,IO执行的顺序使用的是产生IO的顺序

开机就生效:

title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=627d0a6a-e81e-4750-891e-1466c6932e9f ... ... elevator=deadline

@网络子系统调优

工具:

mii-tool

# mii-tool eth0

# ethtool eth0

如果网卡的工作模式自动识别出错,可以手工更改

# ethtool -s eth0 speed 100 duplex full autoneg off

iptraf 测试当前网卡的实时流量情况

iptraf-3.0.0.tar.gz

# iptraf -d eth0

netperf 测试两个服务器时间的实际最大传输速度。

netperf-2.5.0.tar.bz2

基于c/s模式测试

建议:

局域网之前的测试,一般测试的速度都比较理想

跨机房的测试。

netserver

netperf -H 192.168.0.10 -l 30

# netperf -H 10.1.1.140 -l 30

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.1.1.140 (10.1.1.140) port 0 AF_INET

Recv Send Send

Socket Socket Message Elapsed

Size Size Size Time Throughput

bytes bytes bytes secs. 10^6bits/sec

87380 16384 16384 30.31 93.04

多网卡绑定

多个网卡使用软件绑定,就像是一个网卡一样使用,网卡的传输带宽就累计。

eth0 ----\

抽象成bond0 swtich

eth1 ----/

前提: 绑定的网卡强烈建议是同一型号。

临时绑定的:

rhel6:

1、加载对应的绑定网卡使用的驱动模块。

# modprob bonding mode=0 miimon=100

mode设定工作模式

0 负载均衡模式 (两个网卡同时使用,理论上带宽翻倍)

1 高可用模式 (其中一个网卡工作,另外的网卡备用)

miimon=100 每100毫秒对网卡进行检测。

2、激活虚拟网卡(绑定后的逻辑网卡,以后配置IP的就是该网卡,物理网卡不需要配置IP)

rhel6必须先把NetworkManager关闭:

# service NetworkManager stop

# chkconfig NetworkManager off

# ifconfig bond0 10.1.1.28 netmask 255.255.255.0 up

# ifenslave bond0 eth0 eth1 <---把物理网卡eth0,eth1绑定到bond0

表面上看,配置了IP和发送数据都是使用bond0,实际上是bonding软件驱动,使用物理网卡在底层发送数据。

# ifconfig

bond0 Link encap:Ethernet HWaddr 52:54:00:C3:B8:57

inet addr:10.1.1.28 Bcast:10.1.1.255 Mask:255.255.255.0

inet6 addr: fe80::5054:ff:fec3:b857/64 Scope:Link

UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1

。。。。

eth0 Link encap:Ethernet HWaddr 52:54:00:C3:B8:57

UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1

。。。

eth1 Link encap:Ethernet HWaddr 52:54:00:C3:B8:57

UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1

。。。

临时取消绑定:

# ifenslave -d bond0 eth0 eth1

# ifconfig bond0 down

# rmmod bonding <--卸载模块

方法2: 编写配置文件

# vim /etc/modprobe.d/dist.conf

alias bond0 bonding

options bonding miimon=100 mode=0

# vim /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

ONBOOT=yes

BOOTPROTO=static

IPADDR=1.1.1.138

NETMASK=255.255.255.0

NM_CONTROLLED="no" 《——————

MASTER=yes

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="none"

HWADDR="52:54:00:C3:B8:57"

NM_CONTROLLED="no" 《---

ONBOOT="yes"

MASTER=bond0

SLAVE=yes

# vim /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE="eth1"

BOOTPROTO="none"

HWADDR="52:54:00:42:C1:8A"

NM_CONTROLLED="no" 《----

ONBOOT="yes"

MASTER=bond0

SLAVE=yes

# service network restart

测试

在绑定的机器上看网卡流量:

# watch "ifconfig |grep ‘RX packets‘ | head -3 |tail -2"

Every 2.0s: ifconfig |grep ‘RX packets‘ | ... Wed Jan 2 03:22:42 2013

RX packets:9532 errors:0 dropped:0 overruns:0 frame:0

RX packets:9470 errors:0 dropped:0 overruns:0 frame:0

从另外一台机器发送大文件到绑定的机器

原文地址:https://www.cnblogs.com/steven9898/p/11331151.html

时间: 2024-10-10 10:07:07

linux的性能调优的相关文章

[转]Linux常用性能调优工具索引

From:http://www.frostsky.com/2013/03/linux-performance-analysis-tool?wpmp_switcher=desktop 前段时间看到brendangregg的 Linux Performance Analysis and Tools PPT里面提到Linux常用性能调优工具, 见下图: 其中提到了的工具,大部分在我日常工具箱里或者在实践的案例里面使用过, 都有很高的价值,这里方便大家索引下: nicstat: 参见 这里 oprofi

20个Linux服务器性能调优技巧

Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的. Linux高可用服务器集群解决方案让IT系统管理员可以从容应对许多常见的硬件和软件故障,允许多台计算机一起工作,为关键服务正常运行提供保障,系统管理员可以不中断服务执行维护和升级.Linux服务器有各种用途

[转]20个你不得不知的Linux服务器性能调优技巧

Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的.Linux高可用服务器集群解决方案让IT系统管理员可以从容应对许多常见的硬件和软件故障,允许多台计算机一起工作,为关键服务正常运行提供保障,系统管理员可以不中断服务执行维护和升级. Linux服务器有各种用途

[转载] 高流量大并发Linux TCP 性能调优

原文: http://cenwj.com/2015/2/25/19 本文参考文章为: 优化Linux下的内核TCP参数来提高服务器负载能力 Linux Tuning 本文所面对的情况为: 高并发数 高延迟高丢包(典型的美国服务器) 值得注意的是,因为openvz的VPS权限比较低,能够修改的地方比较少,所以使用openvz的VPS作VPN服务器是非常不推荐的. 我们通过修改 /etc/sysctl.conf 来达到调整的目的,注意修改完以后记得使用: sysctl -p 来使修改生效. 首先,针

Linux系统内核性能调优

做过Linux平台性能测试的童鞋平时可能会遇到如下问题: 1. TCP端口号不够用导致并发上不去(即与服务器端建立新连接失败) 2. TIME_WAIT状态连接过多导致应用服务器(Nginx.Haproxy.Redis.Tomcat等)性能下降或假死 等等 我们可以通过优化系统内核参数来解决上述问题,优化步骤如下: Linux 平台 1. 参考附件1中sysctl.conf文件替换或修改系统中/etc/sysctl.conf 意义: (1) 突破系统最大打开文件描述符数限制(系统级别) (2)

Linux VMf性能调优

Linux VMf performance Tuning 摘自:http://www.linuxhowtos.org/System/Linux%20Memory%20Management.htm 缓冲区和缓存的区别 缓冲区和特定的块设备联系在一起,包括文件系统的缓存, 元数据,和跟踪动态页面 一些补丁(patchsets)允许内核自动调整交换分区的阀值, 适应现场的使用:它们可能没有保存用户设定的值

linux 服务器性能调优总结

1.性能分析的几个方面 https://blog.csdn.net/w174504744/article/details/53894127 2.cpu 性能分析工具 perf https://blog.csdn.net/qq_15437667/article/details/50724330 3.常用内存泄露检测工具 https://blog.csdn.net/u011466536/article/details/39778171 valgrind 原文地址:https://www.cnblog

linux安全和调优

一. Linux安全 1. Linux发行版本选择主流的,更新较快的.从官网获取安装镜像 2. 硬件和物理安全设置bios密码设置grub密码设置系统密码选择有安全保障的idc机房 3. 系统和用户方面关闭用不到的服务   (http://www.aminglinux.com/study_v2/chapter16.html#id5)尽量升级到最新稳定版程序包设置防火墙规则  (http://www.aminglinux.com/study_v2/chapter16.html#id3)不需要登录的

linux性能调优总结

系统性能一直是个热门话题.做运维这几年也一直在搞性能调优,写这个文章也算是对工作的总结. 讲调优第一步是,要讲为什么要调优?也就是系统分析,分析还需要有指标,做好性能监控的情况下,看到确实需要调优才能进行.不能为了调优而 “调优“ 那不是调优,那是破坏. 性能分析的目的 找出系统性能瓶颈 为以后的优化提供方案或者参考 达到良好利用资源的目的.硬件资源和软件配置. 影响性能的因素 想确定有哪些因素,首先确定你的应用是什么类型的?例如: cpu密集型例如web服务器像nginx node.js需要C