《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应用,它们都有许多的后台进程,需要结合各自的作用做谨慎调整。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

相关推荐
寂柒39 分钟前
信号量——基于环形队列的生产消费模型
linux·ubuntu
一袋米扛几楼982 小时前
【密码学】CrypTool2 工具是什么?
服务器·网络·密码学
林姜泽樾5 小时前
Linux入门第十二章,创建用户、用户组、主组附加组等相关知识详解
linux·运维·服务器·centos
xiaokangzhe5 小时前
Linux系统安全
linux·运维·系统安全
feng一样的男子5 小时前
NFS 扩展属性 (xattr) 提示操作不支持解决方案
linux·go
南棱笑笑生5 小时前
20260310在瑞芯微原厂RK3576的Android14查看系统休眠时间
服务器·网络·数据库·rockchip
XDHCOM6 小时前
ORA-32152报错咋整啊,数据库操作遇到null number问题远程帮忙修复
服务器·数据库·oracle
Highcharts.js6 小时前
Highcharts React v4.2.1 正式发布:更自然的React开发体验,更清晰的数据处理
linux·运维·javascript·ubuntu·react.js·数据可视化·highcharts
c++之路7 小时前
Linux网络协议与编程基础:TCP/IP协议族全解析
linux·网络协议·tcp/ip
Charlie__ZS7 小时前
Ubuntu 22.04新建用户,并赋予管理权限
linux·os·ubuntn