优化Linux系统性能的必杀技:调整进程优先级!学会使用nice命令,让你的系统飞一般的顺畅!

article/2025/10/3 21:25:29

在这里插入图片描述

文章目录

  • 前言
  • 一. nice命令介绍
    • 1.1 nice的介绍
    • 1.2 cpu资源的调度
    • 1.3 nice是控制内核吗?
  • 二. 语法格式及常用选项
  • 三. 参考案例
    • 3.1 将ls命令的优先级调整为最高
    • 3.2 将 find 命令的优先级调整为最低
    • 3.3 如何查看nice值
  • 四. nice和renice的区别
  • 总结

前言

大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第54篇文章。

专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。

如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

一. nice命令介绍

1.1 nice的介绍

当多个进程同时运行时,系统必须对它们进行调度以确保它们公平地共享系统资源,例如CPU和内存。

进程调度是操作系统中非常重要的一部分,因为它直接影响到系统的整体性能。Linux系统中有一个非常有用的命令,叫做nice。

nice 命令,它可以用来设置进程的优先级,以便在系统资源有限的情况下更好地分配资源。这个命令可以让程序在 CPU 资源有限时的保持响应性,并且可以让低优先级的任务不影响高优先级任务的执行。

1.2 cpu资源的调度

说到这里就不得不提一下CPU资源的调度:

CPU 资源的调度是操作系统中一个非常重要的功能,操作系统通过 CPU 调度算法来决定哪个进程应该获得 CPU 时间片来执行。

CPU 调度算法的目标是最大化系统的吞吐量、最小化进程的等待时间以及提高系统的响应性能。

常见的 CPU 调度算法有以下几种:

  • 先来先服务调度算法(FCFS):按照进程到达的顺序依次执行,不考虑进程的执行时间和优先级,适用于批处理系统。

  • 短作业优先调度算法(SJF):按照进程的执行时间排序,短作业先执行,适用于交互式系统。

  • 优先级调度算法(Priority Scheduling):每个进程都有一个优先级,优先级高的进程先执行,适用于实时系统和多用户系统。

  • 时间片轮转调度算法(Round Robin):为每个进程分配一个时间片,时间片用完后,进程被挂起,给其他进程执行机会,适用于交互式系统和多用户系统。

  • 多级反馈队列调度算法(Multilevel Feedback Queue):将进程按照优先级划分为多个队列,每个队列有不同的时间片大小,适用于各种系统。

在实际应用中,操作系统通常会采用多种调度算法的组合,以达到更好的性能和更高的吞吐量。同时,操作系统也会根据不同的应用场景和硬件环境进行优化和改进。

而nice是用户能够控制的cpu调度的一种方法。

1.3 nice是控制内核吗?

不是的,nice 命令是用户态程序,通过修改进程的优先级来影响内核的进程调度。

在 Linux 操作系统中,进程的调度是由内核实现的,内核会根据一定的调度算法来选择下一个要执行的进程,并将 CPU 时间片分配给该进程。进程的优先级是内核的一个属性,内核会根据进程的优先级来决定进程的调度顺序。

nice 命令可以用来修改进程的优先级,实际上是通过调用 setpriority() 系统调用来修改进程的优先级,setpriority() 系统调用是内核提供的一个函数,可以用来修改进程的优先级。nice 命令实际上就是在调用 setpriority() 系统调用,并将调整值传递给内核,内核再根据调整值来修改进程的优先级。

因此,nice 命令不是直接控制内核,而是通过修改进程的优先级来影响内核的进程调度。

二. 语法格式及常用选项

依据惯例,我们还是先查看帮助,使用 nice --help

[root@mufenggrow docker]# nice --help
用法:nice [选项] [命令 [参数]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness.  Niceness values range from
-20 (most favorable to the process) to 19 (least favorable to the process).Mandatory arguments to long options are mandatory for short options too.-n, --adjustment=N   add integer N to the niceness (default 10)--help		显示此帮助信息并退出--version		显示版本信息并退出

nice的参数比较简单,一共就三个:

参数描述
-n, --adjustment=N指定优先级的调整值,N 的范围是 -20 到 19。-20 表示最高优先级,19 表示最低优先级。
-h, --help显示帮助信息。
-v, --version显示版本信息。

有了具体的参数之后,我们再来看实战案例:

三. 参考案例

3.1 将ls命令的优先级调整为最高

在 Linux 系统中,进程的优先级是通过一个整数值来表示的,称为“nice 值”。nice 值范围从 -20 到 +19,其中 -20 表示最高优先级,+19 表示最低优先级,0 表示默认优先级。

这里要求将ls调整为最高,所以用 -20, 代码如下:

[root@mufeng ~]# nice -n -20 ls

3.2 将 find 命令的优先级调整为最低

最低使用的是+19, 代码如下:

[root@mufenggrow docker]# nice -n 19 find / -name "test"

注意事项:

  • nice 命令需要使用 root 权限才能够修改其他用户的进程优先级。
  • 优先级的调整值只是一个相对值,因此即使设置了最高优先级,也不能保证程序一定能够立即响应。
  • 对于使用多核 CPU 的系统,nice 命令只能够调整程序在一个 CPU 核心上的优先级,而不能够调整在多个 CPU 核心上的优先级。

3.3 如何查看nice值

案例一: 我们先设置vim a.txt 的nice值为15

[root@mufenggrow ~]# nice -n 15 vim a.txt

然后再另一个创建查看nice值

方法一:使用ps命令:使用以下命令可以列出所有正在运行的进程和它们的nice值

[root@mufenggrow ~]# ps -eo pid,command,nice |grep vim80336 vim a.txt                    15

方法二: 使用top命令:使用以下命令可以打开top监视器并查看正在运行的进程及其nice值

四. nice和renice的区别

nice和renice都是Linux/Unix系统中用于控制进程优先级的命令,但它们的作用不同。

nice命令用于在启动进程时设置进程的初始优先级。

可以在命令行上使用nice命令为任何命令指定一个nice值,以控制该命令的优先级。

更具体地说,nice命令允许您增加或降低一个进程的优先级。默认情况下,所有进程的初始nice值都是0,它们在系统中以默认优先级运行。使用nice命令可以在启动进程时将其nice值设置为负值,以使其在系统中以较低的优先级运行,或将其设置为正值,以使其以较高的优先级运行。

renice命令用于更改已经在运行的进程的优先级。与nice命令不同,renice命令可以更改正在运行的进程的nice值,以便在运行时重新调整其优先级。可以使用renice命令将进程的nice值更改为更高或更低的值,以改变其优先级。

总之,nice和renice都是用于控制进程优先级的命令,但它们的作用不同。nice命令用于在启动进程时设置初始优先级,而renice命令用于更改正在运行的进程的优先级。

案例一:我们使用renice把vim a.txt的优先级调到6

  1. 打开一个终端窗口,并运行以下命令查找正在运行的vim a.txt进程的进程ID
ps -ef | grep "vim a.txt"
  1. 找与vim a.txt进程相关的进程ID,然后将其应用于renice命令。

假设您的vim a.txt进程ID为1234,您可以使用以下命令将其nice值设置为6:

sudo renice -n 6 -p 1234

总结

nice命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~


http://chatgpt.dhexx.cn/article/56aAIiwm.shtml

相关文章

Linux nice及renice命令使用

Linux nice及renice命令使用 引言: linux内核是一个了不起的马戏表演者,它在进程和系统资源之间小心地玩着杂耍,并保持系统的正常运转。同时,内核也很公平,它将资源公平地分配给各个进程。但是,如果用户需要给一个重要进程提高优先级、或是降低优先级,该怎么办呢?答案是…

Linux进程监测和操控之top、ps、kill、nice、renice命令

文章目录 1、概述2、动态监测进程信息:top命令2.1、Linux系统的整体情况2.2、Linux进程的情况2.3、监控指定进程 3、静态查看进程信息:ps命令3.1、查看进程的资源占用3.2、查看父进程ID3.3、查看指定进程的内存占用 4、结束进程5、进程优先级5.1、启动程…

linux的nice 命令和renice命令

二者没有太大的区别,都是用于改变进程的优先级,所谓的优先级就是谁有更大的机会先执行,那么为什么要有nice这个命令呢?nice”是指“niceness”,即友善度,所以这个值越小的话,比如-10&#xff0c…

Linux 中的 renice 命令详解及C/C++代码实现

Linux 中的 nice 命令有助于执行具有修改的调度优先级的程序/进程。 它启动具有用户定义的调度优先级的进程。 如果我们给一个进程更高的优先级,那么内核会为这个进程分配更多的 CPU 时间。 而 renice 命令允许您更改和修改已运行进程的调度优先级。 什么是进程 …

Java之throw和throws的区别

throw和throws的区别 共同点区别总结 共同点 两者在抛出异常时,抛出异常的方法并不负责处理,顾名思义,只管抛出,由调用者负责处理。 区别 (1)throws用于方法头,表示的只是异常的申明&#xf…

Throw和Throws详解

Throw和Throws详解 ​ 1.throw是什么?有什么用? ​ throw是java中关于异常的一种操作,如果在try{}catch{}中使用了throw,就代表自己书写的这个方法,可以自己 处理异常了,就是抛出的一个动作,可…

Java异常:throw 和 throws的区别

throws:用来声明一个方法可能抛出和所有异常的信息,表现出现异常的可能性,但并不一定会发生异常。(可以理解为为了预防异常的出现,而用throws提前声明一下) throw:指抛出的一个具体的异常类型&…

Throws和Throw的区别?

在初学Java异常时,总是被throws和throw搞晕,今天来理一下它们之间的关系。 1、throws 方法名后面跟上 throws Exception 证明这个方法里的语句可能会发生异常,注意是可能!在别处如果调用这个方法时,就必须也抛出异常…

再探java基础——throw与throws

再探java基础——throw与throws 以前虽然知道一些异常的处理,也用过一些,但是对throw和throws区别还是有不太清楚。今天用实例测试一下。 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一…

try catch 和throw以及throws的使用

转载:https://www.cnblogs.com/zhangdaicong/p/6127984.html try-catch和throw,throws的区别 java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws…

Java异常之throw,throws和Throwable

Java异常处理中有throw开头的三兄弟,分别是throw,throws以及Throwable,那么他们之间到底怎么区分呢,且听我慢慢道来。 Throwable Throwable是一个类,该类被异常类Exception以及错误类Error继承,其主要结构如下&#…

Java throws 使用

在开发中,如果去调用别人写的方法时,是否能知道别人写的方法是否会发生异常?这是很难判断的。针对这种情况,Java总允许在方法的后面使用throws关键字对外声明该方法有可能发生异常,这样调用者在调用方法时,…

【JavaSE】throws 异常处理

文章目录 1. 基本介绍2. 快速入门案例3. 注意事项和使用细节 1. 基本介绍 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由…

throws异常

在程序开发过程中,程序员会尽量避免错误的发生,但是总会发生一些不可预测的事情,例如除法运算时除数为0 、内存不足、栈溢出等,这些就是异常,java语言提供了异常的处理机制,处理一些不可预期的事情。 使用t…

Elasticsearch之利用bulk提高写入性能(含源码分析)

什么是bulk操作 bulk是批量的意思,也就是把原来单个的操作打包好,通过批量的api提交到ES集群。下面是个示例: 单个操作: PUT my-index-000001/_doc/1 {"timestamp": "2099-11-15T13:12:00","message&…

.NET5必备工具——EF大数据批量处理----Bulk系列

之前做项目的时候,如果在大批量操作数据时,性能不好.因为在框架中使用了EntityFramework,于是就搜索到某著名插件,Z系列。 1.安装 然后在类里面添加引用之后,使用DbContext就可以直接点出来。 2.博客园有人做过对比试验 我们直接拿数据说话吧. EF传统…

初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

1. bulk:1.1. bulk语法:1.2. bulk行为-增删改: 2. bulk-index批量插入:3. bulk-update批量修改:4. bulk-delete批量删除:5. _update_by_query条件更新:6. _delete_by_query条件删除:…

mysql bulkupdate_Bulk Upsert for MySQL PostgreSQL

什么是 Upsert "UPSERT" is a DBMS feature that allows a DML statements author to atomically either insert a row, or on the basis of the row already existing, UPDATE that existing row instead, while safely giving little to no further thought to con…

JPA 2.1: Bulk Update and Delete

为什么80%的码农都做不了架构师?>>> JPA 2.1: Bulk Update and Delete In the JPA 2.0 and early version, if you want to execute a bulk updating query, you have to use update or delete clause in JPQL directly. JPA 2.1 introduce new Criteri…

ElasticSearch提供的bulk update性能对比

目的:为了对比update的数据中重复数据对性能的影响。