使用 Linux 进程管理命令进行性能调优

2023-10-16

在服务器管理中,了解正在运行的进程如何详细工作(从高负载进程到慢响应时间进程)非常重要。当你的服务器变得如此缓慢或无法响应时,你应该了解进程管理或Linux进程管理。

当是时候杀死一个进程 or renice它以及如何monitor当前正在运行的进程以及这些进程如何影响系统负载。让我们看看 Linux 进程管理将如何帮助我们调整系统。

 

 

工艺类型

在我们开始讨论 Linux 进程管理之前,我们应该回顾一下进程类型。有四种常见的流程类型:

  • 父进程
  • 子进程
  • 孤儿进程
  • 守护进程
  • 僵尸进程

父进程是一个运行 fork() 系统调用的进程。除进程 0 之外的所有进程都有一个父进程。

子进程由父进程创建。

孤儿进程当其父进程终止或完成时,它继续运行。

守护进程总是从子进程创建然后退出。

僵尸进程存在于进程表中,尽管它已终止。

孤儿进程是仍在执行的进程,其父进程已死亡,而孤儿进程不会成为僵尸进程。

 

内存管理

在服务器管理中,内存管理是作为系统管理员应该关心的职责之一。

Linux 进程管理中最常用的命令之一是 free 命令:


$ free –m  

-m 选项显示以兆字节为单位的值。

我们主要关心的是buff/cache。

这里 free 命令的输出意味着我们正在使用 536 MB,而可用空间为 1221 MB。

第二行是交换。当内存变得拥挤时就会发生交换。

第一个值是总交换大小,为 3070 MB。

第二个值是已使用的交换,为 0。

第三个值是可用交换空间,为 3070。

从上面的结果可以看出,由于没有使用swap,所以内存状态良好,所以在讨论swap的同时,我们来看看是什么过程目录向我们提供有关交换的信息。


$ cat /proc/swaps  

此命令显示交换大小以及我们正在使用的大小:


$ cat /proc/sys/vm/swappiness  

该命令显示0到100之间的值;该值意味着如果内存使用率达到 70%,系统将使用交换区。

注意:大多数发行版的默认值在 30 到 60 之间,您可以这样修改:


$ echo 50 > /proc/sys/vm/swappiness  

或者使用 sysctl 命令,如下所示:


$ sudo sysctl -w vm.swappiness=50  

使用上述命令更改 swappiness 值不是永久性的,您必须将其写入 /etc/sysctl.conf 文件,如下所示:


$ nano /etc/sysctl.conf  

vm.swappiness=50

Cool!!

交换级别衡量将进程从内存转移到交换的机会。

为您的系统选择准确的交换值需要进行一些实验才能为您的服务器选择最佳值。

 

使用 vmstat 管理虚拟内存

Linux 进程管理中另一个重要的命令是 vmstat。 vmstat 命令提供有关内存、进程和分页的摘要报告。


$ vmstat -a  

我们使用 -a 选项来获取所有活动和非活动进程。

这是该命令的基本列输出:

si: How much swapped in from disk.
so: How much swapped out to disk.
bi: How much sent to block devices.
bo: How much obtained from block devices.
us: The user time.
sy: The system time.
id: The idle time.

我们主要关心的是 (si) 和 (so) 列,其中 (si) 列显示页入,而 (so) 列提供页出。

查看这些值的更好方法是使用延迟选项查看输出,如下所示:


$ vmstat 2 5  

其中 2 是以秒为单位的延迟,5 是我们调用 vmstat 的次数。它显示了命令的五次更新,所有数据均以千字节为单位。

当您启动应用程序时会发生页调入 (si),并且信息会被调入。当内核释放内存时,就会发生页出(so)。

 

系统加载和top命令

在Linux进程管理中,top命令为您提供正在运行的进程的列表以及它们如何使用CPU和内存;输出是实时数据。

如果您有一个双核系统,第一个核心的利用率可能为 40%,第二个核心的利用率为 70%,在这种情况下,top 命令可能会显示 110% 的组合结果,但您不会知道各个值每个核心。


$ top -c  

我们使用 -c 选项来显示命令行或该进程背后的可执行路径。

您可以在查看 top 命令统计数据时按 1 键来显示各个 CPU 的状态。

请记住,某些进程会像子进程一样产生;您将看到同一个程序的多个进程,例如 httpd 和 PHP-fpm。

你不应该只依赖 top 命令;在采取最终行动之前,您应该查看其他资源。

 

使用 iotop 监控磁盘 I/O

由于磁盘活动较多,系统开始变慢,因此监视磁盘活动非常重要。这意味着要找出哪些进程或用户导致了此磁盘活动。

Linux进程管理中的iotop命令可以帮助我们实时监控磁盘I/O。如果没有的话可以安装:


$ yum install iotop  

不带任何选项运行 iotop 将生成所有进程的列表。

要查看导致磁盘活动的进程,您应该使用 -o 选项:


$ iotop -o  

您可以轻松了解哪些程序正在影响系统。

 

ps 命令

我们已经讨论过ps 命令之前在上一篇文章中介绍了如何按内存使用率和 CPU 使用率对进程进行排序。

 

使用 iostat 和 lsof 监控系统运行状况

iostat 命令为您提供 CPU 利用率报告;您可以将其与 -c 选项一起使用来显示 CPU 利用率报告。


$ iostat -c  

输出结果很容易理解,但是如果系统繁忙,你会看到%iowait增加。这意味着服务器正在传输或复制大量文件。

使用此命令,您可以检查读写操作,因此您应该充分了解磁盘挂起的原因并做出正确的决定。

此外,我们使用 lsof 命令列出打开的文件:

lsof 命令显示哪个可执行文件正在使用该文件、进程 ID、用户以及打开的文件的名称。

 

计算系统负载

计算系统负载在Linux进程管理中非常重要。系统负载是当前正在工作的系统的处理量。它不是衡量系统性能的完美方法,但它为您提供了一些证据。

您可以这样计算负载:

实际负载 = 总负载(正常运行时间)/ CPU 数量

您可以通过查看 uptime 命令或 top 命令来计算正常运行时间:


$ uptime  

$ top  

top 命令显示 1、5 和 15 分钟内的服务器负载。

正如您所看到的,第一分钟的平均负载为 0.00,第五分钟的平均负载为 0.01,第十五分钟的平均负载为 0.05。

当负载增加时,系统会对处理器进行排队,如果有许多处理器核心,系统会将负载平均分配到服务器的核心上以平衡工作。

您可以说良好的平均负载约为 1。这并不意味着如果负载超过 1 就存在问题,但如果您开始长时间看到更高的数字,则意味着负载较高,并且存在问题问题。

 

pgrep 和 systemctl

您可以使用 pgrep 命令获取进程 ID,后跟服务名称。


$ pgrep servicename  

此命令显示进程 ID 或 PID。

请注意,如果此命令显示多个进程 ID(如 httpd 或 SSH),则最小的进程 ID 是父进程ID.

另一方面,您可以使用 systemctl 命令来获取主 PID,如下所示:


$ systemctl status <service_name>.service  

有多种方法可以获取所需的进程 ID 或父进程 ID,但这一种非常简单直接。

 

使用 systemd 管理服务

如果我们要讨论 Linux 进程管理,我们应该看一下systemd。 systemd 管理和控制 CentOS 7 等现代 Linux 系统上的服务。

您可以像这样启动、停止和检查状态:


$ systemctl status <service_name>.service

$ systemctl stop <service_name>.service

$ systemctl start <service_name>.service  

您可以使用 systemctl 命令,而不是使用 chkconfig 命令在引导期间启用和禁用服务:


$ systemctl enable <service_name>.service

$ systemctl disable <service_name>.service  

Systemd 还附带了 top 命令的版本,用于显示属于特定服务的进程;您可以像这样使用 system-cgtop 命令:


$ systemd-cgtop  

正如您所看到的,所有关联的进程、路径、任务数量、CPU 使用百分比、内存分配以及相关的输入和输出。

我们可以使用此命令输出服务内容的递归列表,如下所示:


$ systemd-cgls  

此命令为我们提供了非常有用的信息,我们可以使用这些信息来做出决定。

 

Nice 和 renice 进程

进程的nice值是一个数字,指示属于该进程以及它如何争夺CPU。

高的 Nice 值表示您的进程的优先级较低,那么如何nice你将成为其他用户,从这里,名字就来了。

合适的范围是从 -20 到 +19。

Nice命令在创建时设置进程的nice值,而renice命令稍后调整该值。


$ nice –n 5 ./myscript  

该命令增加了nice值,这意味着优先级降低了5。


$ sudo renice -5 2213  

该命令减小nice值意味着增加优先级,数字(2213)就是PID。

您可以增加其nice值(较低优先级),但不能降低它(高优先级),而root用户可以同时执行这两个操作。

 

发送终止信号

要终止导致问题的服务或应用程序,您可以发出终止信号 (SIGTERM)。你可以回顾一下之前的帖子信号和工作.


$ kill process ID  

我们称这个方法为安全杀死。但是,根据您的情况,也许您需要像这样强制挂起服务或应用程序:


$ kill -1 process ID  

有时候,安全杀戮和重装却无济于事;你可以使用 -9 选项发送终止信号 SIGKILL,我们称之为强制杀戮.


$ kill -9 process ID  

此命令没有清理操作或安全退出,因此不是首选。但是,您可以使用 pkill 命令执行更正确的操作。


$ pkill -9 serviceName  

并且可以使用 pgrep 命令来确保属于该服务的所有进程都被杀死。


$ pgrep serviceName  

我希望您对 Linux 进程管理有一个很好的了解,以及如何采取良好的行动来使系统健康。

谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Linux 进程管理命令进行性能调优 的相关文章

  • 如何在 MacOS 上安装 VirtualBox

    如何在 macOS 上安装 VirtualBox 在 macOS 系统上安装 VirtualBox 以及扩展包的分步教程 VirtualBox 是一款流行的跨平台虚拟机管理器 可让您在 Mac 上创建虚拟机 VM VM可用于同时运行不同的操
  • 如何在 Ubuntu 18.04 上安装 Anaconda

    Anaconda 是最流行的 Python 数据科学和机器学习平台 用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带了 1 000 多个数据包 conda命令行工具和名为 Anaconda Navigator 的桌面图形

随机推荐

  • 如何检查Python版本

    Python 是世界上最流行的编程语言之一 它用于开发网站 编写脚本 机器学习 分析数据等 本文介绍如何使用命令行检查操作系统上安装的 Python 版本 这在安装需要特定版本 Python 的应用程序时非常有用 我们还将向您展示如何以编程
  • 如何在 Ubuntu 18.04 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 在虚拟机上运行 Ubuntu 时 不存在交换分区 唯一的
  • Linux 中的终止命令

    Linux是一个伟大而先进的操作系统 但它并不完美 有时 某些应用程序可能会开始表现不稳定并变得无响应或开始消耗大量系统资源 无响应的应用程序无法重新启动 因为原始应用程序进程永远不会完全关闭 唯一的解决方案是重新启动系统或终止应用程序进程
  • 如何更改 Linux 中的 Swappiness 值

    交换空间是 RAM 内存已满时使用的硬盘的一部分 交换空间可以是专用交换分区或交换文件 当 Linux 系统耗尽物理内存时 非活动页面将从 RAM 移至交换空间 Swappiness 是一个 Linux 内核属性 它设置将页面从物理内存换出
  • 如何在 Python 中查找列表的长度

    列表是Python中最常用的数据类型之一 用于存储相同类型的项目的集合 本文介绍如何查找列表的长度 len 功能 Python有一个内置函数len 返回给定对象的长度 该对象可以是一个list 元组 字符串 字典等 的语法len 函数如下
  • Tmux 入门

    本指南将介绍 Tmux 的安装和基本用法 以帮助您入门和运行 什么是 tmux Tmux 是终端多路复用器的替代品GNU 屏幕 换句话说 这意味着您可以启动 Tmux 会话 然后在该会话中打开多个窗口 每个窗口占据整个屏幕 并且可以分割成矩
  • 如何在 Python 中向列表添加元素(追加、扩展和插入)

    在 Python 中使用列表时 您经常需要向列表中添加新元素 Python 列表数据类型具有三种添加元素的方法 append 将单个元素追加到列表中 extend 将可迭代的元素追加到列表中 insert 在列表的给定位置插入单个项目 所有
  • 如何添加 Git 远程

    通常 在使用 Git 时 您将仅使用一个名为 origin 的远程服务器 并针对不同的功能和环境使用不同的分支 Origin 是克隆存储库时自动创建的远程名称 并指向克隆的存储库 然而 当与一群人协作处理一个项目时 您可能会发现使用多个 G
  • Linux 中的 Dig 命令(DNS 查找)

    Dig Domain Information Groper 是一个强大的命令行工具 用于查询 DNS 名称服务器 The dig命令 允许您查询有关各种 DNS 记录的信息 包括主机地址 邮件交换和名称服务器 由于其灵活性和易用性 它是系统
  • 如何在 Ubuntu 20.04 上安装 Zoom

    Zoom是一个易于使用的通信平台 集云视频会议 实时消息传递和内容共享于一体 使用 Zoom 您可以举办网络研讨会 组织在线会议以及创建会议室 本指南介绍如何在 Ubuntu 20 04 上安装 Zoom 相同的说明适用于所有基于 Debi
  • 如何在 Ubuntu 20.04 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它通常用于通过缓存 API 和数据库调用结果中的各种对象来加速应用程序 本文介绍如何在 Ubuntu 20 04 上安装和配置 Memcached 安装 Memcached mem
  • PyQt5绘图教程(绘画API)

    在本教程中 我们将学习如何绘制矢量图形PyQt5 正如您将看到的 在 Python 中 PyQt5 模块是可用于绘图目的的最简单的模块 在开始之前 让我们使用 PyQt5 创建一个窗口 在其中绘制图形 目录 hide 1 创建一个 PyQt
  • NumPy where 教程(带示例)

    The numpy where函数用于检索 ndarray 中给定条件为 true 的元素的索引 学完本教程后 您将充分了解如何使用numpy where查询NumPy 数组 目录 hide 1 语法和参数 2 使用 x 和 y 参数替换值
  • 使用 sed 命令掌握 Linux 文件中的文本插入

    The ised 中的命令用于在行前插入文本 的一般语法为i命令是 sed pattern i text to be inserted filename 在本教程中 我们将重点介绍如何使用sed命令 目录 hide 1 Sed Insert
  • Sed 命令指南:Linux 中的文本编辑

    sed代表流编辑器 该命令允许您解析和转换文本数据 如果输入源自文件 管道或标准输入 sed逐行处理它 With sed 您可以执行各种文本操作 如插入 删除 搜索和替换 目录 hide 1 Basic Syntax and Operati
  • Pandas查询方法:高效过滤DataFrame

    Pandas提供query 允许用户使用字符串表达式查询 DataFrame 的方法 在本教程中 您将了解query方法以及如何在实际应用中使用它 目录 hide 1 Pandas 查询语法和参数 2 使用查询方法过滤数据帧 3 Using
  • 用于网络故障排除的 Linux 网络命令

    在上一篇文章中 我们谈到了Linux进程管理t 在这篇文章中 我们将讨论 Linux 网络命令以及如何排除网络故障 如果确保物理网络正常工作 下一步就是对网络进行故障排除 这里我们进入我们的主题 即 Linux 网络命令以及如何使用它们对网
  • Pandas loc 与 iloc:何时使用它们进行数据选择

    The loc and iloc属性是 Pandas 库的一部分 允许根据某些标准从 DataFrame 中选择数据 本教程将讨论这两种属性之间的主要区别 以及如何确保您使用适合您特定需求的属性 下表总结了这两个属性之间的差异 Proper
  • 使用 PHP 将数组转换或转换为对象(Hydrator 模式)

    在这篇文章中 我们将使用 PHP Hydrator 模式将数组转换为对象 这个方法很简单 就是将数据从一个地方传输到另一个地方 我们将定义一个类 它将一个数组和一个对象作为输入 并搜索对象中的所有 set 方法 并用数组中的值填充它 首先
  • 使用 Linux 进程管理命令进行性能调优

    在服务器管理中 了解正在运行的进程如何详细工作 从高负载进程到慢响应时间进程 非常重要 当你的服务器变得如此缓慢或无法响应时 你应该了解进程管理或Linux进程管理 当是时候杀死一个进程 or renice它以及如何monitor当前正在运