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

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

相关推荐
量子网络3 分钟前
debian 如何进入root
linux·服务器·debian
时光の尘6 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
我们的五年10 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
我言秋日胜春朝★1 小时前
【Linux】进程地址空间
linux·运维·服务器
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
C-cat.1 小时前
Linux|环境变量
linux·运维·服务器
yunfanleo2 小时前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
m51272 小时前
LinuxC语言
java·服务器·前端
运维-大白同学2 小时前
将django+vue项目发布部署到服务器
服务器·vue.js·django
糖豆豆今天也要努力鸭2 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch