linux多核加速命令 linux多核cpu

Linux TOP 命令

top命令分为汇总区和任务明细区

创新互联公司是一家专注于成都网站建设、网站制作与策划设计,同德网站建设哪家好?创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:同德等地区。同德做网站价格咨询:18980820575

当前时间是15:39:37. 系统已经运行了90天,15个小时,26分钟。当前有两个活跃用户

上下两行以kb形式展示物理内存和swap内存的总计,空闲(free), 已使用(total)的情况

其中buff/cache ,是在cpu读写硬盘数据时,为了提速在内存中开辟的缓冲(buffer针对写)或缓存区域(cache针对读)

avail mem 是创建新进程时,在不使用swap分区的情况下,能够分配的内存大小。这个大小可能比当前的free还大,这是因为buff/cache中的内存在创建进程时,若需要,也是可以抢占过来的。

总共有27个进程,1个运行,26的sleep中

load average后面的三组数字分别是1分钟、5分钟、15分钟的工作负载情况。这里的Load指的出于R(runing)和D(Uninterruptible sleep)的两种状态下的进程数

在单核cpu情况下。load average 为0.4的表示,其cpu利用率只有40%。 load average 为1,表示cpu利用率为100。load average 为2.12说明,cpu已经超负荷112% (2.12减满负荷1,即为超负荷部分)

在多核cpu的机器上,需要将以上的1,5,15的负载除以对应的cpu核数,才好评估对应的cpu的负载情况

比如,这个cpu为40核的机器上,其cpu过去一分钟的使用情况为:8.26/40=0.2065 ,说明cpu使用率只有20%

展示每个进程的情况

在top名称执行后,按小k,可以进入进程杀死对话框

在后面输入进程号,即可杀死进程

在top命令下

按以下大写字母,分别按不同的维度进行排序

当然你也可以在命令启动时,直接对top加参数。比如以cpu使用情况排序

top命令默认显示的进程的运行情况,在top命令执行后,按大写的H,可进入线程执行情况页面,再按一次H则会到进程展示。或者在启动时对top加参数 top -H

在top执行后,按小c,则能够展示进程路径,并且对内核进程的名称(command列),加上方括号。再按c切换回去

当然也可以在启动时,加参数 top -c

top执行后按大V

在top启动后,按小写u,在输入框中输入对应的用户名

或者在top启动时,通过加参数来过滤用户 top -u root

在top启动后,按大O,进入过滤表达式的输入框

表达式有以下几种类型

输入等号'=',清除filter表达式

在top命令下,按t或m来进行进度条显示

首先基于 ps aux | grep processName 找到对应进程的pid

然后使用 top -c -p pid 方式单过滤查看该进程的资源占用情况

Linux下调节CPU使用的几种方法

一,使用taskset充分利用多核cpu,让cpu的使用率均衡到每个cpu上

#taskset

-p, 设定一个已存在的pid,而不是重新开启一个新任务

-c, 指定一个处理,可以指定多个,以逗号分隔,也可指定范围,如:2,4,5,6-8。

1,切换某个进程到指定的cpu上

taskset -cp 3 13290

2,让某程序运行在指定的cpu上

taskset -c 1,2,4-7 tar jcf test.tar.gz test

需要注意的是,taskset -cp 3 13290在设定一个已经存在的pid时,子进程并不会继承父进程的,

因此像tar zcf xxx.tar.gz xxx这样的命令,最好在启动时指定cpu,如果在已经启动的情况下,则需要指定tar调用的gzip进程。

二,使用nice和renice设置程序执行的优先级

格式:nice [-n 数值] 命令

nice 指令可以改变程序执行的优先权等级。指令让使用者在执行程序时,指定一个优先等级,称之为 nice 值。

这个数值从最高优先级的-20到最低优先级的19。负数值只有 root 才有权力使。

一般使用者,也可使用 nice 指令来做执行程序的优先级管理,但只能将nice值越调越高。

可以通过二种方式来给某个程序设定nice值:

1,开始执行程序时给定一个nice值,用nice命令

2,调整某个运行中程序的PID的nice值,用renice命令

通常通过调高nice值来备份,为的是不占用非常多的系统资源。

例:

nice -n 10 tar zcf test.tar.gz test

由nice启动的程序,其子进程会继承父进程的nice值。

查看nice值

# nice -n -6 vim test.txt

# ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 19427 2637 0 75 0 – 16551 wait pts/6 00:00:00 bash

4 T 0 21654 19427 0 71 -6 – 23464 finish pts/6 00:00:00 vim

renice调整运行中程序的nice值

格式:renice [nice值] PID

三,使用ulimit限制cpu占用时间

注意,ulimit 限制的是当前shell进程以及其派生的子进程。因此可以在脚本中调用ulimit来限制cpu使用时间。

例如,限制tar的cpu占用时间,单位秒。

# cat limit_cpu.sh

ulimit -SHt 100

tar test.tar.gz test

如果tar占用时间超过了100秒,tar将会退出,这可能会导致打包不完全,因此不推荐使用ulimit对cpu占用时间进行限制。

另外,通过修改系统的/etc/security/limits配置文件,可以针对用户进行限制。

四,使用程序自带的对cpu使用调整的功能

某些程序自带了对cpu使用调整的功能,比如nginx服务器,通过其配置文件,可以为工作进程指定cpu,如下:

worker_processes 3;

worker_cpu_affinity 0001 0010 0100 1000;

这里0001 0010 0100 1000是掩码,分别代表第1、2、3、4颗cpu核心,这就使得cpu的使用比较平均到每个核心上。

怎么让linuxmint运行快

1.使用Preload预加载

与Prelink类似,Preload是一个运行于后台的监护程序,探测那些常用的软件,并将其放入缓存,以起到加速的作用。在LinuxMint/Ubuntu下安装Preload很简单:

sudo apt-get install preload

Preload默认的配置对于普通用户而言已经不错了,一般不需要修改。如果有进一步掌控其的欲望,可以打开其配置文件进行修改:

sudo gedit /etc/preload.conf

2.清理APT缓存

apt应该算是LinuxMint/Ubuntu系统中使用率最高的命令了,无论安装、卸载软件,还是更新软件源缓存及相关维护,都离不开它。使用逾久,apt缓存也就变得较为臃肿,有必要清理:

sudo apt-get autoclean

3.禁用不必要的启动项

在“启动应用程序”中,根据自身实际,取消不必要的启动项,如欢迎程序、检测新硬件、蓝牙(如果本机没有蓝牙)、桌面共享等。

4.调整交换分区参数

详见《一个小技巧提速你的LinuxMint》

5.禁用休眠/挂起功能(务必慎重)

如果你不需要电脑的休眠/挂起功能,可以手动禁用它(笔记本电脑最好不要禁用休眠/挂起功能)。以管理员身份编辑配置文件:

sudo gedit /etc/initramfs-tools/conf.d/resume

将RESUME=UUID=****这行注释掉(行首加#):

6.修改grub2等待时间

无论你的电脑是否有2个或更多的操作系统,只要安装了LinuxMint/Ubuntu,就必然会安装grub2作为引导管理器。grub2启动时,会在默认的启动项上停留数秒(默认10秒),等待用户选择。我们可以把这个时间改的更短。如果是LinuxMint/Ubuntu单系统,可以直接改为0,即直接进入,无需等待。

以管理员身份编辑grub配置文件,修改GRUB_TIMEOUT项后的数字。

sudo gedit /etc/default/grub

7.使用ZRAM提高内存性能

如果你的电脑内存不太充裕(1G以下),可以使用ZRAM软件来提高内存性能。ZRAM能在系统中创建一个压缩的块设备,用于模拟一个交换分区,减少因内存不足而多硬盘的蹂躏频次。可以使用如下PPA安装ZRAM:

sudo add-apt-repository ppa:shnatsel/zram

sudo apt-get update

sudo apt-get install zramswap-enabler

8.多核启动

默认情况下,即便你的电脑是双核甚至多核的CPU,LinuxMint/Ubuntu启动时仍旧是以单核在执行系统启动任务。可以通过如下修改,使其充分利用多核CPU进行系统启动,从而加快速度。

以管理员身份编辑:

sudo gedit /etc/init.d/rc

找到CONCURRENCY=none行,并修改为CONCURRENCY=makefile

9.禁用视觉特效

如果你的电脑硬件配置较低,可以通过禁用视觉特效达到优化性能的目的。华丽的特效,必然会消耗更多的性能。对于Ubuntu和LinuxMint MATE用户,安装Compiz后,即可把不要的特效都禁用:

sudo apt-get install compizconfig-settings-manager

对于LinuxMint Cinnamon用户,还可以在Cinnamon设置:效果 中禁用相关效果。

10.使用TMPFS减少磁盘读写

TMPFS,顾名思义,乃是临时文件系统。一般情况下,Linux的/tmp文件夹接收着大量关于磁盘读写的操作。而通过优先使用物理内存,可以提高/tmp处理磁盘读写操作的速度。

以管理员身份修改:sudo gedit /etc/fstab

在该文件的末尾,加入如下内容:

# Move /tmp to RAM

tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

除了上述操作之外,最明显的办法就是更换更为简洁、轻量级的桌面环境,如XFCE、LXDE等

Linux里面uptime命令作用是什么?

[root@oldboy ~]# uptime

11:45:25 up 5 days, 13:20, 3 users, load average: 0.00, 0.01, 0.05

uptime内容显示的内容一次是系统时间,开机到现在的天数,用户登录数,以及平均负载。

核心是平均负载,其实就是【单位时间内的活跃进程数】。

2颗,单颗4核CPU为例:

1分钟:10.00 #CPU处理进程1分钟的繁忙程度,忙碌1分钟。

5分钟:8.01 #CPU处理进程5分钟的繁忙程度,忙碌了5分钟

15分钟:5.05 #CPU处理进程15分钟的繁忙程度,忙碌持续15分钟,15分钟内平均值5.

uptime:故障恢复了。

1分钟:1.00 #CPU处理进程1分钟的繁忙程度,忙碌1分钟。

5分钟:8.01 #CPU处理进程5分钟的繁忙程度,忙碌了5分钟

15分钟:5.05 #CPU处理进程15分钟的繁忙程度,忙碌持续15分钟,15分钟内平均值5.

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

总结:15分钟负载值12,是高是低呢

负载数值/总的核心数=1 #开始慢的临界点,实际上1*70%==关注的临界点。

12/8=1.2 大于1就说明有问题。

负载不要超过5,是临界点。

2颗单颗4核CPU,共8核,负载就是8*70%=5左右。

需要关注负载的值:总的核心数*70%=关注的点

==================要掌握的============================

1.平均负载是运行队列中活跃的进程数。

2.平均负载,1,5,15分钟内的负载。

3.需要关注负载的值:总的核心数*70%=关注的点

4.辅助top,ps,uptime,sar,mpstat,pidstat,iostat,排查问题。

5.strace跟踪进程系统调用。

6.记住几个案例(面试讲故事)。

面试官问:

你在工作中遇到过哪些生产故障,是怎么解决的?

最好和数据库相关(负载高),和web相关(PHP进程100%,JAVA内存泄漏)

==================要掌握的============================

***6.平均负载案例分析实战\***

下面,我们以三个示例分别来看这三种情况,并用 stress、mpstat、pidstat 等工具,找出平均负载升高的根源。

stress 是 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。

mpstat 是多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

#如果出现无法使用mpstat、pidstat命令查看%wait指标建议更新下软件包

yum install sysstats -y

yum install stress -y

stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

***场景一:CPU 密集型进程\***

1.首先,我们在第一个终端运行 stress 命令,模拟一个 CPU 使用率 100% 的场景:

[root@oldboy ~]# stress --cpu 1 --timeout 600

2.接着,在第二个终端运行 uptime 查看平均负载的变化情况

# 使用watch -d 参数表示高亮显示变化的区域(注意负载会持续升高)

[root@oldboy ~]# watch -d uptime

*3.最后,在第三个终端运行 mpstat 查看 CPU 使用率的变化情况*

# -P ALL 表示监控所有CPU,后面数字5 表示间隔5秒后输出一组数据

[root@oldboy ~]# mpstat -P ALL 5

#单核CPU,所以只有一个all和0

4.从终端二中可以看到,1 分钟的平均负载会慢慢增加到 1.00,而从终端三中还可以看到,正好有一个 CPU 的使用率为 100%,但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100% 。那么,到底是哪个进程导致了 CPU 使用率为 100% 呢?可以使用 pidstat 来查询

![](18.Linux系统管理-进程管理.assets/a.png)

# 间隔5秒输出一组数据

[root@oldboy ~]# pidstat -u 5 1

#从这里可以明显看到,stress进程的CPU使用率为100%。

- 模拟cpu负载高 `stress --cpu 1 --timeout 100`

- 通过uptime或w 查看 `watch -d uptime`

- 查看整体状态mpstat -P ALL 1 查看每个cpu核心使用率

- 精确到进程: pidstat 1

****场景二:I/O 密集型进程\****

1.首先还是运行 stress 命令,但这次模拟 I/O 压力,即不停地执行 sync

[root@oldboy ~]# stress --io 1 --timeout 600s #利用sync()

stress --hdd 8 --hdd-bytes 1g # hd harkdisk 创建进程去进程写

*2.然后在第二个终端运行 uptime 查看平均负载的变化情况:*

[root@oldboy ~]# watch -d uptime

18:43:51 up 2 days, 4:27, 3 users, load average: 1.12, 0.65, 0.00

*3.最后第三个终端运行 mpstat 查看 CPU 使用率的变化情况:*

# 显示所有 CPU 的指标,并在间隔 5 秒输出一组数据

[root@oldboy ~]# mpstat -P ALL 5

#会发现cpu的与内核打交道的sys占用非常高

*4.那么到底是哪个进程,导致 iowait 这么高呢?我们还是用 pidstat 来查询*

# 间隔5秒后输出一组数据,-u 表示CPU指标

[root@oldboy ~]# pidstat -u 5 1

#可以发现,还是 stress 进程导致的。

- 通过stress 模拟大量进程读写 `stress --hdd 4 `

- 通过w/uptime查看系统负载信息 `watch -d uptime`

- 通过top/mpstat 排查 `mpstat -P ALL 1 或 top 按1`

- 确定是iowati `iostat 1查看整体磁盘读写情况 或iotop -o 查看具体哪个进程读写`

- 根据对应的进程,进行相关处理.

***场景三:大量进程的场景 高并发场景 \***

*当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。*

*1.首先,我们还是使用 stress,但这次模拟的是 4 个进程*

[root@oldboy ~]# stress -c 4 --timeout 600

*2.由于系统只有 1 个 CPU,明显比 4 个进程要少得多,因而,系统的 CPU 处于严重过载状态*

*3.然后,再运行 pidstat 来看一下进程的情况:*

# 间隔5秒后输出一组数据

[root@oldboy ~]# pidstat -u 5 1

*可以看出,4 个进程在争抢 1 个 CPU,每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达 75%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。*

****分析完这三个案例,我再来归纳一下平均负载与CPU\****

***平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:

平均负载高有可能是 CPU 密集型进程导致的;

平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;

当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源****

**系统负载的计算和意义**

进程以及子进程和线程产生的计算指令都会让cpu执行,产生请求的这些进程组成"运行队列",等待cpu执行,这个队列就是系统负载, 系统负载是所有cpu的运行队列的总和.

[root@oldboyedu ~]# w

20:25:48 up 95 days, 9:06, 1 user, load average: 2.92, 0.00, 0.00

//假设当前计算机有4个核心的cpu,当前的负载是2.92

cpu1 cpu2 cpu3 cpu4

2.94/4(个cpu核心) = 73%的cpu资源被使用,剩下27%的cpu计算资源是空想的

//假设当前的计算有2个核心的cpu,当前的负载是2.92

2.92/2 = 146% 已经验证超过了cpu的处理能力

7. 日常故障排查流程(含日志)

- w/uptime, 查看负载

- ps aux/top 看看 cpu百分比, io wait或者是内存占用的高? (三高 cpu,io,内存)

- top检查具体是哪个进程,找出可疑进程

- 追踪这个进程使用情况,做什么的?

- 看看对应**日志**是否有异常

- 系统日志: /var/log/messages(系统通用日志) /var/log/secure(用户登录情况)

- 服务软件的日志

***3.那平均负载为多少时合理\***

*最理想的状态是每个 CPU核心 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。所以在评判平均负载时,首先你要知道系统有几个 CPU核心,这可以通过 top 命令获取,或`grep 'model name' /proc/cpuinfo`*

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:

- 它没有在等待I/O操作的结果

- 它没有主动进入等待状态(也就是没有调用'wait')

- 没有被停止(例如:等待终止)

《内容来自老男孩老师的课堂笔记》


分享名称:linux多核加速命令 linux多核cpu
当前路径:http://ybzwz.com/article/ddidiph.html