热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

文章目录前言一. nice命令介绍1.1 nice的介绍1.2 cpu资源的调度1.3 nice是控制内核吗?二. 语法格式及常用选项三. 参考案例3.1 将ls命令的优先级调整为最高3

在这里插入图片描述

文章目录

  • 前言
  • 一. 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命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。

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


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
author-avatar
wxxc
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有