《Linux从小白到高手》综合应用篇:深入理解Linux进程调优
本篇深入介绍Linux进程调优.
1. Linux系统进程类型:
Linux的进程可能有成千上万个:
新建状态:进程刚刚被创建,但尚未运行。
就绪状态:进程已经准备好运行,等待CPU分配。
运行状态:进程正在CPU上执行。
等待状态:进程等待某个事件或资源,如I/O操作完成。
终止状态:进程已经结束,等待系统回收资源。
Linux系统进程状态有以下几种:
可中断的睡眠状态(S浅度睡眠状态):进程正在等待某个事件或资源,可以被信号或中断唤醒。
不可中断的睡眠状态(D深度睡眠状态):进程正在等待磁盘I/O或其他硬件操作完成,无法被中断。
停止状态(T):进程已经被停止执行,通常是因为接收到了某种信号而停止。
进程跟踪状态(t):用于调试和跟踪进程。
进程之间也是有着错综复杂的关系的,我们可以用pstree来查看进程结构:
2. 进程优先级调整
nice 值和 renice 命令:
–nice 值是一个进程的优先级调整参数,范围从 -20 到 19,数值越低优先级越高。默认情况下,新进程的 nice 值为 0。
–使用nice命令可以在启动新进程时指定 nice 值。例如:
nice -n 10 myprogram
//将以 nice 值为 10 启动myprogram
–使用renice命令可以调整正在运行的进程的 nice 值。例如:
renice -n 5 -p [进程 ID]将指定进程的 nice 值调整为 5。
实时进程优先级:
–Linux 还支持实时进程,实时进程的优先级高于普通进程。实时进程的优先级范围从 0 到 99,数值越低优先级越高。
–使用sched_setscheduler系统调用可以将进程设置为实时进程。这需要在程序中使用特定的编程接口进行设置,通常只有特定的应用场景才需要使用实时进程。
3. 进程资源限制
ulimit 命令:
–ulimit命令可以限制用户或进程的资源使用。例如,可以使用ulimit -n查看当前用户可以打开的最大文件描述符数量,使用ulimit -n [新的限制值]可以设置新的限制。
–可以在 shell 启动脚本(如.bashrc或.profile)中设置ulimit参数,以确保用户在每次登录时都有特定的资源限制。
cgroups(Control Groups):
–cgroups 是 Linux 内核提供的一种机制,可以对一组进程的资源使用进行限制和管理。
–可以使用 cgroups 限制进程的 CPU、内存、磁盘 I/O 等资源的使用。例如,可以限制一组进程使用的 CPU 时间份额,防止某个进程过度占用 CPU 资源。
–通过修改/sys/fs/cgroup/[资源类型]/[控制组名称]/[参数文件]中的值来设置资源限制。例如,要限制一个控制组中的进程使用的 CPU 时间份额,可以修改/sys/fs/cgroup/cpu/[控制组名称]/cpu.cfs_quota_us和cpu.cfs_period_us文件。
4. 进程调度优化
内核调度算法:
–Linux 内核提供了几种进程调度算法,如完全公平调度算法(CFS)和实时调度算法。
–可以通过调整内核参数来影响调度算法的行为。例如,可以调整/proc/sys/kernel/sched_min_granularity_ns和/proc/sys/kernel/sched_wakeup_granularity_ns参数来控制 CFS 调度器的时间粒度,减少不必要的上下文切换。
进程绑定 CPU 核心:
–使用taskset命令可以将特定的进程绑定到特定的 CPU 核心上,避免进程在不同核心之间频繁切换,减少上下文切换开销。例如,taskset -c 0,1 myprogram将myprogram绑定到 CPU 核心 0 和 1 上。
5. 进程监控和分析
top、htop 等工具:
–top和htop是常用的系统监控工具,可以实时显示系统中进程的资源使用情况,包括 CPU 使用率、内存使用量、磁盘 I/O 等。
–通过这些工具可以快速了解系统中哪些进程占用了较多的资源,以便进行优化。
strace 和 ltrace 命令:
–strace命令可以跟踪进程的系统调用,帮助了解进程在运行过程中与操作系统的交互情况。
–ltrace命令可以跟踪进程的库函数调用,有助于分析进程的行为和性能瓶颈。
perf 工具:
–perf是 Linux 内核提供的性能分析工具,可以对系统和应用程序的性能进行详细的分析。
–可以使用perf top查看系统中最耗时的函数,使用perf record和perf report进行更深入的性能分析。
6. 进程调优需要注意的事项
谨慎调整优先级和资源限制:
–过高或过低的优先级可能会导致某些进程无法获得足够的资源,影响系统的整体性能和稳定性。在调整进程优先级和资源限制时,需要根据实际情况进行测试和调整,避免出现资源竞争或饥饿问题。
考虑应用程序的特性:
–不同的应用程序对资源的需求和行为可能不同。在进行进程优化时,需要考虑应用程序的特性,例如是否是 CPU 密集型、内存密集型或 I/O 密集型,以便采取合适的优化措施。
监控和调整:
进程优化是一个持续的过程,需要不断地监控系统性能和进程行为,根据实际情况进行调整。可以使用各种监控工具和性能分析工具,及时发现问题并采取相应的优化措施。
结合不同应用特点做调整:
比如Oracle和Mysql,还有一些java应用,它们都有许多的后台进程,需要结合各自的作用做谨慎调整。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。
相关文章:

《Linux从小白到高手》综合应用篇:深入理解Linux进程调优
本篇深入介绍Linux进程调优. 1. Linux系统进程类型: Linux的进程可能有成千上万个: 新建状态:进程刚刚被创建,但尚未运行。 就绪状态:进程已经准备好运行,等待CPU分配。 运行状态࿱…...

Linux安装elasticsearch单机版
下载地址: Download Elasticsearch | Elastic 下载的安装包是elasticsearch-7.12.0-linux-x86_64.tar.gz 解压缩文件 tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz #编辑文件 vim config/elasticsearch.yml# 加入如下配置 # 集群名称,一个…...

el-table表头加红色星标
代码: <el-table-column prop"name" label"姓名" width"auto"><template #header><span style"color: red; margin-right: 4px">*</span><span>姓名</span></template></el…...

2.1 HTML5 - Canvas标签
文章目录 引言Canvas标签概述定义实例:创建画布 理解Canvas坐标系概述实例:获取Canvas坐标 获取Canvas环境上下文概述实例:获取Canvas环境上下文设置渐变色效果 结语 引言 大家好,今天我们要一起探索HTML5中一个非常有趣且强大的…...
T-Box联网安全定义
T-Box,即Telematics BOX,也称远程信息处理控制单元(Telematics Control Unit,TCU),是车联网中的重要组成部分。它集成了GPS、外部通信接口、电子处理单元、微控制器、移动通信单元和存储器等功能模块&#…...

7. 整数反转【数学】
文章目录 7. 整数反转解题思路Go代码 7. 整数反转 7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [−231,231−1] ࿰…...
Windows环境NodeJS下载配置安装运行
Windows环境NodeJS下载配置安装运行 (1)下载 Node.js — Run JavaScript Everywhere 安装文件。 一路傻瓜式安装。 如果安装正常,输入命令可显示版本号: (2)可以查询nodejs默认的后续依赖安装包位置及缓存…...

石化巡检必备神器,AORO A30防爆手机让“跑冒滴漏”无处藏身!
在石油化工企业生产现场,设备种类繁多,巡检项目错综复杂,任何微小的疏忽都可能引发严重的安全事故。遨游通讯推出了AORO A30防爆手机,精准定位细微故障,在源头上有效控制或消除“跑冒滴漏”等安全隐患。 AORO A30防爆手…...

Smartfusion2开发环境的搭建
Libero软件安装包括libero安装、bibero补丁安装、bibero的license添加和官方ip库的添加等4部分内容组成。具体内容如下所示: 1 Libero软件安装 1、解压LiberoSoC_v11.8的安装包到当前目录,然后运行Libero中的可执行软件进行安装; 图1 双击l…...

使用C++编写一个语音播报时钟(Qt)
要求:当系统时间达到输入的时间时,语音播报对话框中的内容。定时可以取消。qt界面如上图所示。组件如下: countdownEdit作为书写目标时间的line_edit start_btn作为开始和停止的按钮 stop_btn作为取消的按钮 systimelab显示系统时间的lab tex…...
架构师之路-学渣到学霸历程-11
权限管理 我们可以通过一下命令来了解Linux的用户权限; Linux的用户权限真的涉及得非常好,让我们了解一下用户权限的知识吧; let’s go go go~! chmod命令: 作用:变更文件或者目录的权限语法:…...

Java Mail腾讯企业邮箱或其他邮箱发送邮件失败bug记录
问题出现情况 邮件发送时debug用F8逐步运行可以成功发送邮件,但是用F9或者直接运行程序却发送失败未开启mail的debug模式的报错日志是下面这个:org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is java…...
【大数据】HBase集群断电文件坏块导致集群无法启动处理
hfile文件有坏块 Corrupt文件目录:/hbase/data/… HBase异常:region无法在正常上线,http://master:16010页面看region 一直处于transition状态 wal文件损坏 Corrupt文件目录:/hbase/oldWALs/…或/hbase/WALs/… HBase异常&…...
400行程序写一个实时操作系统(三):Sparrow的学习方法
千里之行始于足下,为了让大家的学习更加事半功倍,笔者将会介绍RTOS的学习方法。 可能很多人拿到一份源码,就想通过各种方式搞懂它,例如抄代码或者读代码。 笔者认为,单纯抄一个实时操作系统是没有任何用处的。比如对…...

为什么人工智能用 Python?
人工智能领域倾向于使用Python,主要归因于Python的多个显著优势: 简洁性与可读性:Python的语法设计简洁明了,代码易于阅读和理解,这对于涉及复杂算法和逻辑的人工智能项目尤为重要。它降低了编程门槛,使得…...

【C++差分数组】P1672何时运输的饲料
本文涉及知识点 C差分数组 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 P1672何时运输的饲料 原文比较啰嗦,我简述一下: 第x天运来F1(1<F1<1e6)千克的饲料,第D(1<2e3)天还剩F2&…...

Go基础知识:切片
数组 Go 数组的大小是固定的,其长度是其类型的一部分([4]int并且[5]int是不同的、不兼容的类型) var a [10]intb : [2]string{"Penn", "Teller"} b : [...]string{"Penn", "Teller"}package maini…...

Redis配置篇 - 指定Redis配置的三种方式,以及Redis配置文件介绍
文章目录 1 指定Redis配置的三种方式1.1 通过命令行参数来指定Redis配置1.2 通过配置文件来指定Redis配置1.3 在服务器运行时更改 Redis 配置 2 关于Redis配置文件 1 指定Redis配置的三种方式 1.1 通过命令行参数来指定Redis配置 在redis启动时,可以直接通过命…...
探索scikit-learn的datasets模块:数据集的加载与使用
引言 在机器学习和数据分析领域,数据集的选择和准备是至关重要的一步。scikit-learn库的datasets模块为我们提供了多种内置的数据集,方便我们进行模型训练和测试。这些数据集既有大型的数据集,也有便于教学和初步探索的小型数据集。本文将重…...

手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
有时候,您会被锁定在自己的 Android 设备之外,而且似乎不可能重新进入。 一个例子就是你买了一部二手手机,后来发现无法使用。另一种情况是你忘记了屏幕锁定密码和用于验证密码的 Google 帐户凭据。这种情况很少见,但确实会发生&…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...