linux资源优化

news/2024/11/7 6:23:06/

1.思考步骤

  1. 查看资源使用的详细情况
  2. 根据使用情况决定分配策略
  3. 修改资源分配  

2.如何查看运行中的使用的详细情况?

  1. 进程跟踪:top
  2. 查看打开的文件:lsof

lsof的输出、包含以下字段。  COMMAND:拥有文件描述符的的进程对应的命令名。  PIM:PID。  USER:运行进程的用户。  FD:该列包含两种元素。本例中FD列显示文件的作用。该列还能够显示打开文件的描述 符。文件描述符是一个数字,进程通过它使用系统库和内核来进行文件标识和操作。  TYPE:文件类型(如常规文件、目录、套接字等)。  DEVICE:包含该文件的设备的主要代码和次要代码。  SIZE:文件大小。  NODE:文件的索引节点编号。  NAME:文件名。

如果出现上图所示,这是因为没有权限,需要使用sudo,

运行lsof有以下两种基本方式。 

输出完整的结果,然后将输出结果通过管道用命令less显示,然后在其中搜索你想要的内 容。由于输出结果信息量很大,该方法可能会花点时间。 

使用命令行选项来过滤lsof的输出结果。

  1. 显示一个文件夹下面的文件使用情况,lsof /usr
  2. 使用pid来精确查找,lsof -p pid

3.如何查看中断的使用的详细情况?

上面都是在查看运行中的进程,如果进程发生错误退出了你就啥也看不到了,为此,要使用跟踪程序执行和系统调用

strace(系统调用跟踪)查看用户空间请求内存执行的经过授权的操作,诸如打开文件、读取数 据等等

示例:strace cat /dev/null

ltrace(跟踪对共享库的调用)查看程序在运行时与各种共享库之间的交互情况

ltrace [选项] 程序 [参数...]

示例:ltrace ./my_program

4.如何查看系统线程使用情况?

ps m

线程有一个特殊的标识符tid来表示它自己,想要查看的话需要使用ps m -o pid,tid,command

注意如果pid和tid相同,就意味着这是一个单线程

5.测量CPU时间

监控进程,可以使用top命令加-p选项

示例:top -p pid1 [-p pid2 ...]

而使用time命令则可以查看整个执行过程中占用的CPU时间

示例:/usr/bin/time ls  则可以查看ls执行需要的时间

显示的消息包括:
user:用户时间,指CPU用来运行程序代码的时间,以秒为单位。在现在的处理器中,命 令的运行速度很快,有些不超过一秒,time命令会将它们四舍五入为0。 

system:系统时间,指内核用来执行进程任务的时间(例如读取文件和目录)。 

elapsed:消耗时间,指进程从开始到结束所用的全部时间,包括CPU执行其他任务的时 间。这个数字在检测性能方面不是很有帮助,不过将消耗时间减去用户时间和系统时间 所剩余的时间,能够让你得知进程等待系统资源所消耗的时间。

6.优化手段1--调整进程优先级

我们可以对更改内核对进程的调度方式,从而增加或减少安排给进程的CPU时间。

内核按照每个 进程的调度优先级来运行进程,这些优先级用20和20之间的数字表示。有些古怪的是,20是最高的优先级。越大表示优先级越小

top命令中显示的PR便是表示优先级

PR字段旁边是NI(意思是优先值)字段,显示有关内核进程调度的少许信息,如果你想干预 内核的进程调度,这个信息会对你有用。内核使用NI值来决定进程下一次在什么时间运行。 NI默认值是0。例如,你在后台运行一个计算量很大的进程,且不希望它影响到前台的交互, 想让它在其他进程空闲的时候再运行,就可以使用renice命令将NI设置为20(pid是你要设置的 进程的ID)

示例: renice 20 pid

7.优化手段2--平均负载

平均负载(load average)是准备就绪待执行的进程的平均数。 也就是某一时刻可以使用CPU的进程数的一个估计值。

示例:uptime

 19:52:11 up 6 days, 11:13,  4 users,  load average: 1.09, 1.04, 1.06

分别代表过去1分钟、5分钟和15分钟的平均负载值。

  • 值越低,表示系统越空闲。

  • 值越高,表示系统负载越高。

  • 如果值接近或超过CPU核心数(例如,单核CPU接近1,多核CPU接近核心数),系统可能变得忙碌。

#小技巧:你可以使用lscpu来查看你当前cpu多少核

8.查看系统错误

轻微内存页面错误(页面存在但是MMU无法找到时)、严重内存页面错误(页面不存在)

示例:/usr/bin/time cal > /dev/null  查看发生错误

示例:ps -o pid,min_flt,maj_flt pid

MINFL和MAJFL列显示轻微和严重内存页面错误数目

9.使用vmstat监控CPU和内存性能

示例:vmstat 刷新的秒数

当你运行这个命令时,你会看到一个每刷新秒数更新一次的表格,其中包括以下信息:

  1. procs(进程):

    • r:运行队列中的进程数(等待运行的进程数)。

    • b:不可中断睡眠的进程数(等待I/O的进程数)。

  2. memory(内存):

    • swpd:虚拟内存已使用的大小(单位:KB)。

    • free:空闲内存大小(单位:KB)。

    • buff:用作缓冲区的内存大小(单位:KB)。

    • cache:用作缓存的内存大小(单位:KB)。

  3. swap(交换区):

    • si:从交换区读入内存的交换页数量(单位:KB/秒)。

    • so:写入交换区的交换页数量(单位:KB/秒)。

  4. io(输入/输出):

    • bi:从块设备读入的块数(单位:块/秒)。

    • bo:写入块设备的块数(单位:块/秒)。

  5. system(系统):

    • in:每秒的中断数,包括时钟中断。

    • cs:每秒的上下文切换数。

  6. cpu(CPU):

    • us:用户进程消耗的CPU时间百分比。

    • sy:系统进程消耗的CPU时间百分比。

    • id:空闲CPU时间百分比。

    • wa:等待I/O完成所消耗的CPU时间百分比。

    • st:被其他虚拟机窃取的CPU时间百分比(仅用于虚拟化环境)。

10.I/O监控

示例:iostat

示例:iotop

示例:pidstat -p 1329 1 查看过去某一时间段pid的资源使用情况

11.分配策略

1. CPU分配策略
  • CPU亲和性:将特定的进程绑定到特定的CPU核心上,以减少进程在多个核心之间切换的开销。

    taskset -c 0-3 my_program  # 将my_program绑定到CPU 0-3核心上运行
    
  • 进程优先级:使用nice命令调整进程的调度优先级。

    nice -n 10 my_program  # 启动my_program并将其优先级设置为10(默认优先级为0)
    

    使用renice命令可以在进程运行时调整其优先级。

    renice 5 -p 1234  # 将PID为1234的进程优先级设置为5
    
2. 内存分配策略
  • 内存限制:使用cgroups(控制组)限制进程或进程组的内存使用。

    cgcreate -g memory:/mygroup  # 创建一个名为mygroup的控制组
    echo 1G > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes  # 设置内存限制为1GB
    cgexec -g memory:mygroup my_program  # 在mygroup控制组中运行my_program
    
3. I/O分配策略
  • I/O调度器:选择合适的I/O调度器以优化磁盘访问性能。常见的I/O调度器包括cfqdeadlinenoop

    echo deadline > /sys/block/sda/queue/scheduler  # 将sda设备的I/O调度器设置为deadline
    
4. 网络带宽分配策略
  • 流量控制:使用tc命令设置流量控制规则,以限制特定进程或网络接口的带宽使用。

    tc qdisc add dev eth0 root handle 1: htb default 11
    tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
    
5. 磁盘空间分配策略
  • 磁盘配额:使用quota命令设置用户或组的磁盘配额,以限制他们在文件系统上使用的磁盘空间

     

http://www.ppmy.cn/news/1544979.html

相关文章

速盾:高防cdn遭受攻击会瘫痪吗?

在互联网时代,网络安全问题日益突出,各种攻击手段层出不穷。在这个背景下,高防CDN(Content Delivery Network)作为一种常见的安全防护技术,受到了广泛应用。但是,很多人对高防CDN遭受攻击后的表…

每日OJ题_牛客_小红的口罩_堆+贪心_C++_Java

目录 牛客_小红的口罩_堆贪心 题目解析 C代码 Java代码 牛客_小红的口罩_堆贪心 小红的口罩 描述: 疫情来了,小红网购了 n个口罩。众所周知,戴口罩是很不舒服的。小红每个口罩戴一天的初始不舒适度为 ai​。 小红有时候…

SQL中的IN语句和EXISTS语句

大家好,使用SQL时经常需要根据其他表的值过滤数据,常见方法是使用IN和EXISTS子句。这两者都用于检查子查询中值的存在,但它们的工作方式略有不同,并可能对性能产生不同影响。本文将探讨IN和EXISTS的定义、工作原理及其使用场景&am…

Spring 中的各种 Editor,其实都是java.beans包中PropertyEditor的实现类

java Bean规范中有这样一个接口,PropertyEditor,从这个接口的名字来看,是用来进行编辑属性的,那自然是编辑对象的属性。 1.为什么需要属性编辑器呢 我们通常会在类型定义各种类型的属性,通常我们自己通过new创建对象,并…

【elkb】创建用户和角色

在使用中我们不能把超管的用户信息给到所有者,我们需要为不用的使用场景创建不同的用户。 登录管理员用户 打开管理页面 创建角色 点击角色,创建角色 填写角色信息 设置Kibana 权限 最后点击创建角色 创建用户 点击用户--->创建用户 填写信息 登录…

云渲染与汽车CGI图像技术优势和劣势

在数字时代,云渲染技术以其独特的优势在汽车CGI图像制作中占据了重要地位。云渲染通过利用云计算的分布式处理能力,将渲染任务分配给云端的服务器集群进行计算,从而实现高效、高质量的渲染效果。 这种技术的优势主要体现在以下几个方面&#…

MySQL日期时间函数大全

DAYOFWEEK(date)  返回日期date是星期几(1星期天,2星期一,……7星期六,ODBC标准) mysql> select DAYOFWEEK(1998-02-03);   -> 3 WEEKDAY(date)  返回日期date是星期几(0星期一,1星期二,……6 星期天)。 mysql> select WEEKDAY(1997-10-04 22:23:00);   -> 5…

​基于学习的地铁客流动态预测智能调度方法

1 文章信息 文章题为“A Learning Based Intelligent Train RegulationMethod With Dynamic Prediction forthe Metro Passenger Flow”,该文于2023年发表至“IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS”。文章的核心观点是提出了一种基于学习的智…