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

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

相关推荐
菜菜小蒙1 分钟前
【Linux】基于UDP/TCP服务器与客户端的实现
linux·服务器·udp
a小胡哦17 分钟前
Windows、Mac、Linux,到底该怎么选?
linux·windows·macos·操作系统
_extraordinary_26 分钟前
Linux权限(一)
android·linux·excel
易安杰33 分钟前
ElasticSearch+Kibana通过Docker部署到Linux服务器中
linux·elasticsearch·搜索引擎·全文检索·中文分词
web2u38 分钟前
Docker入门及基本概念
java·运维·服务器·spring·docker·容器
人生!?1 小时前
给小米/红米手机root(工具基本为官方工具)——KernelSU篇
android·linux·智能手机
Anna_Tong2 小时前
阿里云如何协助解决操作系统兼容性问题
linux·服务器·ubuntu·阿里云·centos·云计算·系统迁移
HaoHao_0102 小时前
如何将MySQL数据库迁移至阿里云
服务器·数据库·阿里云·云计算·云服务器·迁移
不良人天码星2 小时前
Linux的基础指令和环境部署,项目部署实战(下)
linux·运维·服务器
火一线3 小时前
【ASP .NET Core】ASP .NET Core介绍
服务器·游戏·.netcore