linux运营培训,Linux培训-优化篇

一.硬件优化

系统运行的速度是由系统中最慢的设备来决定。

选择固态硬盘:

TLC

SLC(最好)MLC

优化的时候,优化离cpu最近的设备

CPU

-->

CACHE

主频:倍频 * FSB

CACHE:

高速缓冲器,提高应用程序的命中率.L1(数据区,指令区)独立->L2 独立->L3 共享

优化思路:想方设法让应用数据停留在cache中更长的时间。

应用运行过程:

DISK

-->

MEM

-->

cache

-->

CPU

DISK:优化IO算法

SSD: SATA3

-->

PCIe -->  NVMe

二.系统层面

1.常用命令

(1).ps

自定义显示进程列

# ps axo pid,comm,pcpu

(2).vmstat

# vmstat 1 2

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

3  0    148 284184    212 663928    0    0    12     5   81  121  0  0 99  0  0

0  0    148 284060    212 663928    0    0     0     0   96  126  0  0 100  0  0

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

(3).iostat

# iostat

Linux 3.10.0-693.el7.x86_64 (rh1)       08/02/2018      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.20    0.01    0.32    0.01    0.00   99.46

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

sda               0.87        12.23         5.24     898971     385228

scd0              0.00         0.01         0.00       1054          0

dm-0              0.86        11.76         5.21     864302     383008

dm-1              0.00         0.03         0.00       2228        152

avg-cpu:

选项

说明

%user

CPU在用户态执行进程的时间百分比。

%nice

CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比

%system

CPU处在内核态执行进程的时间百分比

%iowait

CPU用于等待I/O操作占用CPU总时间的百分比

%steal

管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比

%idle

CPU空闲时间百分比

Device:

选项

说明

Device

设备名称

tps

每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。

Blk_read/s

Indicate the amount of data read from the device expressed in a number of blocks per second. Blocks are equivalent to sectors with kernels 2.4 and later and therefore have a size of 512 bytes. With older kernels, a block is of indeterminate size.

Blk_wrtn/s

Indicate the amount of data written to the device expressed in a number of blocks per second.

Blk_read

取样时间间隔内读扇区总数量

Blk_wrtn

取样时间间隔内写扇区总数量

# iostat -x

Linux 3.10.0-693.el7.x86_64 (rh1)       08/02/2018      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.20    0.01    0.32    0.01    0.00   99.46

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

sda               0.00     0.02    0.24    0.63    12.23     5.24    40.10     0.00    0.88    1.18    0.77   0.31   0.03

scd0              0.00     0.00    0.00    0.00     0.01     0.00    68.00     0.00    0.35    0.35    0.00   0.35   0.00

dm-0              0.00     0.00    0.21    0.64    11.75     5.21    39.57     0.00    0.94    1.33    0.80   0.31   0.03

dm-1              0.00     0.00    0.00    0.00     0.03     0.00    36.06     0.00    7.01    0.05   24.21   1.21   0.00

选项

说明

rrqm/s

每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并

wrqm/s

每秒对该设备的写请求被合并次数

r/s

每秒完成的读次数

w/s

每秒完成的写次数

rkB/s

每秒读数据量(kB为单位)

wkB/s

每秒写数据量(kB为单位)

avgrq-sz

平均每次IO操作的数据量(扇区数为单位)

avgqu-sz

平均等待处理的IO请求队列长度

await

平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)

svctm

平均每次IO请求的处理时间(毫秒为单位)

%util

采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

(4).mpstat

查看多核cpu ,可以显示每个核心cpu的运行情况。 vmstat 只能显示总体的cpu

# mpstat -P ALL

Linux 3.10.0-693.el7.x86_64 (rh1)       08/02/2018      _x86_64_        (1 CPU)

10:13:33 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle

10:13:33 PM  all    0.20    0.01    0.32    0.01    0.00    0.01    0.00    0.00    0.00   99.46

10:13:33 PM    0    0.20    0.01    0.32    0.01    0.00    0.01    0.00    0.00    0.00   99.46

(5).

# time ls

real    0m0.006s

user    0m0.000s

sys     0m0.005s

* 0.001s 为等待时间

(6).sar

sar 日志存储目录

cd /var/log/sa

# sar -f sa31       #默认cpu

# sar -f sa31 -b    #查看磁盘

# sar -q -f sa31    #查看队列

# sar -q -f sa31 |awk '{print $3}' |sort -unr                    #最大队列的进程号

# sar -d -p -f sa31 |awk '{print $2,$4}' |grep ^sd |sort -unr    #哪个设备的读取速率最高

# sar -n DEV        #查看网络吞吐量

# sar -r 1 1        #内存和swap使用情况

(7).dmidecode

查看详细的硬件信息

(8).lspci,lscpu,lsusb,lsscsi,lsblk

查看各种硬件信息命令

(9).dmesg

- 记录系统启动时候的硬件相关信息,启动后该日志文件不再更新

/var/log/dmesg

- 查看系统启动后加载的硬件信息,需要查看dmesg

2.sysctl

(1).sysctl -a     #显示当前可调整的所有参数

(2).修改配置文件,调整参数

vim /etc/sysctl.conf

老版本

vim /etc/sysctl.d/10-sysctl.conf  新版本

(3).sysctl -p /etc/sysctl.d/10-sysctl.conf

使参数永久生效

3.swap

swap可以是文件也可以是磁盘分区,最多可以有32个,每个最大64G

性能考虑:

避免 swap 文件

将 swap 分区分速度快的介质上

多个小的 swap 效果要比一个大的 swap 效果好 设置 swap 优先级别

4.内核IO调度器

-NooP Scheduler

适用于随机访问设备,如闪盘 FIFO ,基本合并与排序 适用于嵌入式操作系统

-Anticipatory I/O Scheduler

内核默认的调度器

不适用于数据吞吐量大的数据库系统

-DeadLine Io调度器

提升 IO 性能的同时避免 IO等待

保证既定的IO请求最小的延迟时间

-CFQ I/O Schedulere

RHEL 默认的调度器 IO请求轮询进行,为应用平均分配带宽,提供一个平等的工作环境

(1).临时修改

[root@rh1 ~]# cat /sys/block/sda/queue/scheduler

noop [deadline] cfq

[root@rh1 ~]# echo cfq>/sys/block/sda/queue/scheduler

[root@rh1 ~]# cat /sys/block/sda/queue/scheduler

noop deadline [cfq]

(2).修改所有的配置

修改 grub.conf

#boot=/dev/hda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server (2.6.18-8.el5)

root (hd0,0)

kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet elevator=deadline initrd /initrd-2.6.18-8.el5.img

(3).tuned-adm

5.内存优化

相关参数:

vm.dirty_expire_centisecs = 3000   #旧数据的回写时间,30秒后脏页要回写到磁盘

vm.dirty_background_ratio = 10     #整个系统脏页百分比超过10,则进行刷脏页

vm.dirty_ratio = 30                #整个脏页达到内存的30%时,则进行刷脏页

vm.dirty_writeback_centisecs = 500 #刷新脏数据进程的时间间隔

vm.swappiness=30                   #使用内存还是swap的倾向值

6.网络优化

BDP

带宽延迟乘积

计算公式(字节) = 带宽(MB)x 延时 (s)x1024x1024/8

相关参数:

net.ipv4.tcp_mem = 194976 259968 389952

net.ipv4.tcp_wmem = 4096  16384 4194304

net.ipv4.tcp_rmem = 4096  87380 4194304

net.ipv4.udp_mem = 194976 259968 389952

net.core.wmem_max = 131071

net.core.rmem_max = 131071

net.core.wmem_default = 110592

net.core.rmem_default = 110592

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值