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

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

相关推荐
EricWang13589 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
人工智能培训咨询叶梓31 分钟前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调
算法与编程之美36 分钟前
文件的写入与读取
linux·运维·服务器
xianwu5431 小时前
反向代理模块
linux·开发语言·网络·git
Amelio_Ming1 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
Ven%2 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
JaneJiazhao2 小时前
HTTPSOK:SSL/TLS证书自动续期工具
服务器·网络协议·ssl
CodeToGym3 小时前
Webpack性能优化指南:从构建到部署的全方位策略
前端·webpack·性能优化
萨格拉斯救世主3 小时前
戴尔R930服务器增加 Intel X710-DA2双万兆光口含模块
运维·服务器
无所谓จุ๊บ3 小时前
树莓派开发相关知识十 -小试服务器
服务器·网络·树莓派