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

news2024/11/14 21:53:41

在这里插入图片描述

文章目录

  • 前言
  • 一. 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 vim
 80336 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://www.coloradmin.cn/o/382560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zookeeper的安装

目录 Zookeeper的安装 1、环境准备 2、上传 3、解压文件到opt/zookeeper目下 4、安装完后进入zookeeper,找到conf目录 5、复制zoo_sample.cfg 6、编辑zoo.cfg 7、复制一份会话,进入zookeeper安装目录,创建一个文件夹zkdata&#xff0…

Linux·DMA 与零拷贝技术

DMA 与零拷贝技术注意事项:除了 Direct I/O,与磁盘相关的文件读写操作都有使用到 page cache 技术。1. 数据的四次拷贝与四次上下文切换很多应用程序在面临客户端请求时,可以等价为进行如下的系统调用:File.read(file, buf, len);…

NOC2021年测试卷3

1. 角色初始位置坐标是(0,0),执行下面程序后,角色会出现在什么位置上?( ) A. x坐标为10,y坐标为50B. x坐标为40,y坐标为50C. x坐标为50,y坐标为40D. x坐标为30,y坐标为502. 执行下面程序后,按一次→键,兔子会?() A. 向右移动10步B. 向左移动10步C. 向上移动…

入职外包三个月,我提桶跑路了

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

基于龙芯+国产FPGA 的VPX以太网交换板设计(一)

“棱镜门”的曝光,暴露出我国的信息安全存在极大的安全隐患,作为信息传输 载体的网络设备,其国产化需求迫切,国产处理器、国产可编程逻辑器件、以太网交 换芯片等具有良好的应用前景,另一方面,宽带数据业务…

Java 对象深拷贝

需求 写一个java对象深拷贝工具,用以对象深拷贝。 分析 在 Java 中,变量间值的传递分为两种。对于 int,char,string,等基本数据类型进行值传递时,使用值传递。即原变量 a 的值与新变量 b 的值相等,且 a 与 b 拥有不同的内存地址…

HTML认知

HTML认知 文章目录HTML认知语法规范注释标签组成和关系标签的关系标签学习排版系列标签**标题标签****段落标签**换行标签水平线标签文本格式化标签媒体标签图片标签src 目标图片的路径alt 替换文本title 图片的标题width 宽度 / height 高度路径绝对路径相对路径(常…

win10搭建android monkeyrunner自动化测试环境

本文记录一下monkeyrunner环境搭建遇到的各种坑,以免以后再次踩坑。首先要提一下巨坑,务必要安装java 8(本文记录于2023.3),安装其他版本java,运行monneyrunner会有很多问题,见第七节。 一、安…

Threejs 教程1

threejs核心概念场景、照相机、对象、光、渲染器等1.1.场景Scene 场景是所有物体的容器,对应着显示生活中的三维世界,所有的可视化对象级相关的动作均发生在场景中。1.2.照相机Camera照相机是三维世界中的观察者,类似与眼睛。为了观察这个世界…

5款软件压力测试工具分享

一、什么是软件压力测试? 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行…

达梦: DmAPService可以手动开启,但是不能开机自启

在部署生产环境安全版数据库发现,DmAPService服务不能开机自启,这样会导致服务器重启后,部署的定时备份任务不能够成功备份数据。 为了在服务器重启后,不影响定时任务自动备份数据库,现将解决这个问题的办法总结如下&a…

《MySql学习》 MySQL的 加锁规则

MySQL加锁原则 两个原则 原则 1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间(区间锁和行锁)。原则 2:查找过程中访问到的对象(索引)才会加锁。 两个优化 1.优化 1:索引上…

美团2面:如何保障 MySQL 和 Redis 数据一致性?这样答,让面试官爱到 死去活来

美团2面:如何保障 MySQL 和 Redis 的数据一致性? 说在前面 在尼恩的(50)读者社群中,经常遇到一个 非常、非常高频的一个面试题,但是很不好回答,类似如下: 如何保障 MySQL 和 Redis…

JavaSE学习进阶 day1_02 继承(面向对象第二大特性)

第三章 继承 (面向对象的第二大特性) 3.1 概述 3.1.1 引入 假如我们要定义如下类: 学生类,老师类和工人类,分析如下。 学生类 属性:姓名,年龄 行为:吃饭,睡觉 老师类 属性:姓名,年龄,薪水 行为:吃饭,睡觉,教书 班…

C++ List链表使用

1. list的介绍及使用1.1 list的介绍1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个…

百度飞桨PaddleSpeech的简单使用

PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型,一些典型的应用示例如下:语音识别、语音翻译 (英译中)、语音合成、标点恢复等。…

《商用密码应用与安全性评估》第一章密码基础知识1.2密码评估基本原理

商用密码应用安全性评估(简称“密评”)的定义:在采用商用密码技术、产品和服务集成建设的网络与信息系统中,对其密码应用的合规性、正确性、有效性等进行评估 信息安全管理过程 相关标准 国际:ISO/IEC TR 13335 中国:GB/T …

跨境电商独立站到底有什么优缺点?

无论你在哪个行业,都有优点和缺点,正如人们常说的,人无完人。那么我们就来谈谈最近比较多人关注的跨境电商独立网站的缺点:1. 这个过程很麻烦。跨境电商独立站的有效周期需要比较长,因为前期需要投入大量的精力,比如推…

【flink】 flink入门教程demo 初识flink

文章目录通俗解释什么是flink及其应用场景flink处理流程及核心APIflink代码快速入门flink重要概念什么是flink? 刚接触这个词的同学 可能会觉得比较难懂,网上搜教程 也是一套一套的官话, 如果大家熟悉stream流,那或许会比较好理解…

异步循环

业务 : 批量处理照片 , 批量拆建 , 裁剪一张照片需要异步执行等待 , 并且是批量 所以需要用到异步循环 裁剪图片异步代码 : 异步循环 循环可以是 普通 for 、 for of 、 for in 不能使用forEach ,这里推荐 for…