CPU-IO-网络-内核参数的调优

有关使用 CPU 资源的调优

调整 nice 值改变进程优先级

nice 概述:在 LINUX 系统中,Nice 值的范围从-20 到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具有最高优先级的程序,其 nice 值最低,所以在 LINUX 系统中,值-20 使得一项任务变得非常重要;与之相反,如果任务的 nice 为+19,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的 CPU 时间的更大使用份额,这也就是 nice 的名称的来意。默认优先级是 0

在命令运行前,调整进程 nice 值,让进程使用更多的 CPU

语法: nice -n 优先级数字 命令
例:将 vim a.txt 命令的优先级,从默认的 0 级别调高到-5 级别

[root@centos60 ~]# nice -n -5 vim a.txt

再打开另一个终端窗口执行以下命令:

[root@centos60 ~]# ps aux | grep a.txt
root       9684 95.5  0.7 209568 60936 pts/0    R<+  10:06   0:09 vim a.txt

[root@centos60 ~]# top -p 9684

使用 renice 修改正在运行的进程的优先级

语法:renice -n 5 PID #修改进程优先级

[root@centos60 ~]# renice -n 6 9851
9851 (进程 ID) 旧优先级为 6,新优先级为 6

3、进程优先级不可以超过 -20 到 19 范围

[root@centos60 ~]# renice -n -21 9851
9851 (进程 ID) 旧优先级为 6,新优先级为 -20

设置进程的 CPU 亲和力

taskset 作用:在多核的情况下,可以认为指定一个进程在哪颗 CPU 上执行程序,减少进程在不同CPU 之前切换的开销。

1、安装 taskset 命令:

[root@centos60 ~]# yum -y install util-linux

2、taskset 语法: taskset -cp [CPU ID 号] 命令或进程 ID

常用参数:
-p, --pid 在已经存在的 pid 上操作
-c, --cpu-list 以列表格式显示和指定 CPU

例 1:本服务器是 4 核 CPU ,指定 vim 命令在第一个 CPU 上运行。
[root@centos60 ~]# taskset -c 0 vim a.txt

在另一个终端下运行:
[root@centos60 ~]# ps aux | grep a.txt

查看vim a.txt进程运行在哪个cpu

[root@centos60 ~]# taskset -cp 12457

例 3:指定 vim c.txt 程序运行在第 2 和第 4 个 CPU 上
[root@centos60 ~]# taskset -c 1,3 vim b.txt
另开终端
[root@centos60 ~]# ps aux | grep vim
[root@centos60 ~]# taskset -cp 12895

使用 vmstat 找出系统中存在瓶颈

CPU 利用率比例分配:

如果一个 CPU 被充分使用,利用率分类之间均衡的比例应该是。
65% ­ 70% User Time #用户态(通常指我们运行的服务和程序)。
30% ­ 35% System Time #内核态。
0% ­ 5% Idle Time #空闲。
Context Switches ­ 上下文切换的数目直接关系到 CPU 的使用率,如果 CPU 利用率保持在上述均衡状态时,有大量的上下文切换是正常的。

上下文切换指的就是 cpu 中寄存器数据的写入和读出。每个进程在使用 cpu 时,都需要把自己的数据先写入 cpu 的缓存(寄存器)中,然后 cpu 才能根据缓存中的数据来计算。

实战使用 vmstat 找出系统中存在瓶颈

实战场景:一台 4 核心,8G 内存的服务器,根据 vmstat 运行的结果,来分析系统中存在的问题。大家一定要认真学习这个 4 核心,8G 内存查找系统瓶颈的思路。只要用心学会这个思路,后期就可以很轻松分析出 8 核心,16G 或 8 核心,32G 服务器的瓶颈。

vmstat 输出每列字段的意义:

1、Procs(进程):
r: The number of processes waiting for run time.
等待运行的进程数。如果等待运行的进程数越多,意味着 CPU 非常繁忙。另外,如果该参数长期大于 cpu 核心数 3 倍,说明 CPU 资源可能存在较大的瓶颈。
b: The number of processes in uninterruptible sleep.
处在非中断睡眠状态的进程数。即等待 IO 的进程数量。
2、Memory(内存):
swpd: the amount of virtual memory used.
已使用的虚拟内存大小。如果虚拟内存使用较多,可能系统的物理内存比较吃紧,需要采取合适的方式来减少物理内存的使用。swapd 不为 0,并不意味物理内存吃紧,如果 swapd 没变化,si、so
的值长期为 0,这也是没有问题的 。
free: the amount of idle memory.
空闲的物理内存的大小,free数量很少接近与0,说明内存不够用了,如果swap也被使用到的话,使用oracle数据库,cache会占用很大,内存会占用很大,但没使用到swap就没关系。
buff: the amount of memory used as buffers.
用来做 buffer(缓存,主要用于块设备缓存)的内存数,单位:KB
cache: the amount of memory used as cache.
用作缓存的内存大小,如果 cache 的值大的时候,说明 cache 缓存的文件数多,如果频繁访问到的文件都能被 cache 缓存,那么磁盘的读 IO bi 会非常小。单位:KB
3、Swap(交换分区)
si: Amount of memory swapped in from disk (/s).
从磁盘写入到 swap 虚拟内存的交换页数量,单位:KB/秒。如果这个值大于 0,表示物理内存不够用或者内存泄露了。
so: Amount of memory swapped to disk (/s).
从 swap 虚拟内读出的数据。即从 swap 中的数据写入到磁盘的交换页数量,单位:KB/秒,如果这个值大于 0,表示物理内存不够用或者内存泄露了。内存够用的时候,这 2 个值都是 0,如果这 2 个值长期大于 0 时,系统性能会受到影响,磁盘 IO和 CPU 资源都会被消耗。
当看到空闲内存(free)很少的或接近于 0 时,就认为内存不够用了,这个是不正确的。不能光看这一点,还要结合 si 和 so。如果 free 很少,但是 si 和 so 是 0,那么不用担心,系统性能这时不会受到影响的

4、IO(这里指 Input/Output Memery 的数据,即 bi:进入内存,bo:从内存中出去)bi: Blocks received from a block device (blocks/s).每秒从块设备接收到的块数,单位:块/秒 也就是读块设备。bi 通常是读磁盘的数据bo: Blocks sent to a block device (blocks/s).每秒发送到块设备的块数,单位:块/秒 也就是写块设备。bo 通常是写磁盘的数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值