Linux性能调优,还可以从这些方面入手

        linux是目前最常用的操作系统,下面是一些常见的 Linux 系统调优技巧,在进行系统调优时,需要根据具体的系统负载和应用需求进行调整,并进行充分的测试和监控,以确保系统的稳定性和性能。同时,调优过程中要谨慎操作,避免对系统造成不良影响。

        其主要调优方向,大概包含几个方面:内存、CPU、i/o  网络调优以及安全性和资源限制。

一、内存调优

1、调整内核参数

        vm.swappiness:控制内核将内存页换出到交换空间的倾向。值越低,系统越倾向于保留内存中的页,减少对交换空间的使用。

        默认情况下,vm.swappiness设置为60,在服务器上,当内存使用率达到40%时就可能会使用交换空间。当你的服务器的RAM充足时,这个值可以适当降低,设置为10或更低,以减少不必要的交换操作。

        修改方法:编辑/etc/sysctl.conf文件,写入vm.swappiness=10

        运行命令sysctl -p使更改生效。

        vm.vfs_cache_pressure:调整内核回收用于目录和 inode 缓存的内存的倾向。较高的值会使内核更积极地回收缓存,释放内存用于其他用途。默认值为 100,可以根据系统负载和内存需求进行调整。

2、使用大页内存

        大页内存可以减少页表的大小,提高内存访问效率。对于内存密集型应用,如数据库,可以显著提高性能。
        启用大页内存需要在系统启动时进行配置,并在应用程序中进行相应的设置。

(1)在Linux系统中,可以通过下面的命令来查看系统是否支持大页内存。

cat /proc/meminfo | grep Hugepagesize

如果输出了大页的大小信息,则说明系统支持大页内存

(2)配置大页内存

临时配置:

sysctl -w vm.nr_hugepages=<number_of_hugepages>

其中 <number_of_hugepages> 是要分配的大页数量,例如大页大小设置为4096

永久配置:

在 /etc/sysctl.conf 文件中添加以下参数:

vm.nr_hugepages=<number_of_hugepages>

保存文件后,使其生效:

sysctl -p

二、CPU 调优

1、调整进程优先级

        使用 nice 和 renice 命令可以调整进程的优先级。较低的优先级数值表示更高的优先级。

        对于关键任务或对响应时间要求较高的进程,可以提高其优先级,确保它们获得更多的 CPU 时间。

        优先级的值范围是 -20 到 19,数值越小,优先级越高。默认情况下,进程以优先级 0 启动。

nice 基本语法:

nice [-n adjustment] command [arguments]

以优先级 5 启动一个名为 test 的程序:nice -n 5 test

renice  命令用于调整正在运行的进程的优先级。

基本语法:

renice priority [-p] pid... 或 renice priority [-g] pgrp... 或 renice priority [-u] user...
  • 其中,priority 是要设置的新优先级,pid 是进程 ID,pgrp 是进程组 ID,user 是用户名。
  • 例如,将进程 ID 为 1234 的进程优先级调整为 10:renice 10 -p 1234

注意:只有 root 用户可以将进程优先级设置为负值,以提高进程的优先级,普通用户只能减低进程的优先级或者保持不变。

2、绑定 CPU 核心

        通过 taskset 命令或在启动应用程序时指定 CPU 亲和性,可以将特定的进程绑定到特定的 CPU 核心上。

        这可以避免进程在不同的 CPU 核心之间频繁切换,提高 CPU 缓存的命中率,从而提高性能。

查询进程的CPU亲和性:

taskset -p <pid>

<pid> 是进程的ID 

设置进程的CPU亲和性:

taskset -cp <cpuset> <pid>

<cpuset> 是一个用逗号分隔的CPU核心列表, <pid> 是进程的ID

例如:将进程 ID 为 1234 的进程绑定到 CPU 核心 0 和 1 上运行:taskset -cp 0,1 1234

启动新进程时设置CPU亲和性:

taskset <cpuset> <command> [arguments]

<cpuset> 是一个用逗号分隔的 CPU 核心列表,<command> 是要执行的命令,<arguments> 是命令的参数。

例如,启动一个名为 test 的程序,并将其绑定到 CPU 核心 2 和 3 上运行:taskset 2,3 test

三、磁盘 I/O 调优

1、使用 SSD 硬盘

        SSD 硬盘具有更快的读写速度和更低的访问延迟,可以显著提高系统的磁盘 I/O 性能。

        如果可能,可以将关键数据和频繁访问的文件存储在 SSD 上。

对于SSD存储,通常推荐使用none或deadline调度器;对于HDD,则cfq或bfq可能更适合。
检查当前使用的调度器:

cat /sys/block/sda/queue/scheduler

更改调度器:

echo deadline > /sys/block/sda/queue/scheduler

禁用访问时间更新:
        在挂载选项中加入noatime以避免每次文件被读取时都更新访问时间戳,这样可以减少不必要的磁盘I/O。
        编辑/etc/fstab,修改相关分区条目,例如UUID=... / ext4 defaults,noatime 0 1

2、调整文件系统参数

        对于不同的文件系统,可以调整一些参数来优化磁盘 I/O 性能。例如,对于 ext4 文件系统,可以调整 block sizeinode size 等参数。

Ext 文件系统系列(如 Ext4)

  • 在创建文件系统时,可以使用特定的工具和选项来调整块大小和其他参数。例如,使用 mkfs.ext4 命令时,可以通过 -b 选项指定块大小,如 -b 4096 设置块大小为 4KB。
  • inode size 通常不是一个直接可配置的选项,但可以通过调整文件系统的总体布局和存储策略来间接影响 inode 的使用和分配。

XFS 文件系统

  • 使用 mkfs.xfs 命令创建文件系统时,可以通过 -b size= 选项设置块大小,例如 -b size=8192 设置块大小为 8KB。
  • inode 大小通常是根据文件系统的创建参数和存储需求自动调整的,一般情况下不太容易直接指定具体的 inode size。

3、使用磁盘缓存

        Linux 系统的磁盘缓存可以提高磁盘 I/O 的性能。可以通过调整内核参数 vm.dirty_background_ratio 和 vm.dirty_ratio 来控制磁盘缓存的行为。

        vm.dirty_background_ratio 表示当内存中的脏页达到系统内存的一定比例时,内核开始将脏页异步写入磁盘。

        vm.dirty_ratio 表示当内存中的脏页达到系统内存的更高比例时,内核将阻塞所有的写操作,直到脏页被写入磁盘。

临时调整:

sysctl vm.dirty_background_ratio=10
sysctl vm.dirty_ratio=20

永久调整:

  编辑  /etc/sysctl.conf  文件,添加下面设置:

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

保存文件后,使用 sudo sysctl -p 命令使更改生效。

四、网络调优

1、调整网络缓冲区大小

  • 可以通过调整内核参数 net.core.rmem_maxnet.core.wmem_maxnet.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem 来调整网络接收和发送缓冲区的大小。
  • 较大的缓冲区可以提高网络吞吐量,但也可能会增加内存的使用。

net.core.rmem_max:
        定义了内核套接字接收缓冲区的最大大小。这个参数决定了系统在接收网络数据时可以使用的最大缓冲区空间。
net.core.wmem_max:
        定义了内核套接字发送缓冲区的最大大小。它控制了系统在发送网络数据时可以使用的最大缓冲区空间。
net.ipv4.tcp_rmem:
        这个参数是一个包含三个整数值的数组,用于设置 TCP 接收缓冲区的最小、默认和最大大小。例如,4096 87380 6291456表示最小接收缓冲区大小为 4096 字节,默认大小为 87380 字节,最大大小为 6291456 字节。
net.ipv4.tcp_wmem:
        与net.ipv4.tcp_rmem类似,也是一个包含三个整数值的数组,用于设置 TCP 发送缓冲区的最小、默认和最大大小。

临时调整:

sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.wmem_max=<value>
sysctl -w net.ipv4.tcp_rmem=<min>,<default>,<max>
sysctl -w net.ipv4.tcp_wmem=<min>,<default>,<max>

永久调整:

编辑  /etc/sysctl.conf  文件,添加下面设置:

     net.core.rmem_max=<value>net.core.wmem_max=<value>net.ipv4.tcp_rmem=<min>,<default>,<max>net.ipv4.tcp_wmem=<min>,<default>,<max>

保存文件后,使用sudo sysctl -p命令使更改生效。

2、启用网络流量控制

        使用 tc(Traffic Control)工具可以对网络流量进行整形和控制。可以限制特定的网络接口或 IP 地址的带宽使用,确保关键服务的网络带宽得到保障。

3、优化网络协议栈

        对于特定的网络应用,可以调整网络协议栈的参数来提高性能。例如,对于 Web 服务器,可以调整 tcp_tw_reuse 和 tcp_tw_recycle 等参数来优化 TCP 连接的回收和重用。

tcp_tw_reuse:
        这个参数允许在 TIME_WAIT 状态的连接被重新用于新的连接。当设置为 1 时,内核会在安全的情况下(例如连接的时间戳符合要求等)将处于 TIME_WAIT 状态的连接重新分配给新的连接请求。
        启用这个参数可以减少 TIME_WAIT 状态的连接数量,从而节省系统资源,特别是在高并发的服务器环境中。
tcp_tw_recycle:
        这个参数开启快速回收 TIME_WAIT 状态的连接。当设置为 1 时,内核会更快地回收 TIME_WAIT 状态的连接,以减少连接资源的占用。
        但是,在一些网络环境中,开启这个参数可能会导致连接问题,特别是在网络地址转换(NAT)环境下,可能会导致数据包丢失和连接失败。

临时调整:

sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1

永久调整:

编辑  /etc/sysctl.conf  文件,添加下面设置:

net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1

保存文件后,使用sudo sysctl -p命令使更改生效。

五、安全性和资源限制

        一般用在需要确保只有特定用户可以执行某些敏感操作,同时控制每个用户的资源消耗。

1、使用ulimit限制资源

        可以在用户的shell初始化脚本中设置ulimit指令,例如限制打开文件数、进程数等。

在 /etc/security/limits.conf 中定义全局或用户特定的资源限制。

临时调整:

ulimit -n 2048

永久调整:

编辑  /etc/security/limits.conf   文件添加设置:

/etc/security/limits.conf文件的每一行都包含四个字段,分别是:

  1. <domain>:指定限制的范围,可以是用户名、用户组名或通配符*表示全局范围。
  2. <type>:限制的类型,可以是soft(软限制)、hard(硬限制)或-(同时设置软限制和硬限制)。
  3. <item>:要限制的资源项,例如nofile(最大打开文件数)、nproc(最大进程数)等。
  4. <value>:资源限制的值。

例如:以下行表示将用户myuser的最大打开文件数软限制设置为 1024,硬限制设置为 2048:

myuser soft nofile 1024
myuser hard nofile 2048

保存文件后,通常需要用户重新登录才能生效。已经运行的进程,这些限制不会立即生效。

2、利用cgroups管理资源

cgroups(Control Groups)提供了一种机制来限制、记录和隔离进程组的资源使用情况。

创建cgroup目录结构并在其中设置相应的资源控制策略,如CPU份额、内存上限等。

创建cgroup目录:

        可以在 /sys/fs/cgroup/ 目录下创建。例如,创建一个名为  test 的 cgroup:

mkdir /sys/fs/cgroup/mygroup

设置资源控制策略:

        CPU份额控制:

                CPU 份额表示在多个 cgroup 之间分配 CPU 资源的比例。

                例如,设置CPU 份额为512 (相对权重):

echo 512 > /sys/fs/cgroup/mygroup/cpu.weight

        内存上限控制:

                设置内存上限可以限制cgroup中进程使用的内存总量:

                例如:设置内存上限为1GB :

echo 1073741824 > /sys/fs/cgroup/mygroup/memory.limit_in_bytes

将进程添加到cgroup 

        找到要添加到 cgroup 的进程 ID(PID)。可以使用命令如pstop来查找进程 ID。

将进程添加到cgroup

echo <pid> > /sys/fs/cgroup/mygroup/tasks

注意:在操作cgroups 时,可能需要使用管理员权限,确保你有足够的权限来创建和修改 cgroup 目录及设置资源控制策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万界星空科技:智能称重打标系统

万界星空科技的称重系统是其为制造业&#xff0c;特别是线缆、漆包线、食品等行业提供的重要解决方案之一。以下是对该系统的详细介绍&#xff1a; 一、系统概述 万界星空科技称重系统是集成在其MES&#xff08;制造执行系统&#xff09;中的一个功能模块&#xff0c;专门用于…

基于springboot实习管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写&#xff0c;挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…

2020年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;OSI参考模型网络协议的三要素 网络协议的三要素&#xff1a;语法 &#xff0c;语义&#xff0c;同步&#xff08;时序&#xff09; 语法&#xff1a;定义收发双方所交换信息的格式 语法&#xff1a;定义收发双方所要完成的操作 网页的加载 …

深入理解队列(Queue)的实现(纯小白进)

目录&#xff1a; 前言一、 什么是队列?1.1、 队列的特性1.2、 队列的图解 二、 队列的详细实现2.1、 队列不同的实现方式2.2、 队列结构体2.3、 队列的初始化2.4、 入队列2.5、 出队列2.6、 获取对头元素2.7、 获取队尾元素2.8、 队列的判空2.9、 队列有效的元素个数2.10、 队…

Kind部署的K8s证书过期后的解决方案

证书通常有效期为1年&#xff0c;一年后服务将不可用解决方案就是更新证书 1. 找到 Kind 集群的控制平面容器名称,容器名称不一定是这个 docker ps --filter "namekind-control-plane"2. 进入 Kind 控制平面的容器&#xff1a; docker exec -it kind-control-plane…

洛谷入门刷题Day5(想刷水题结果被水题刷了)

P1304 哥德巴赫猜想 题目描述 输入一个偶数 N N N&#xff0c;验证 4 ∼ N 4\sim N 4∼N 所有偶数是否符合哥德巴赫猜想&#xff1a;任一大于 2 2 2 的偶数都可写成两个质数之和。如果一个数不止一种分法&#xff0c;则输出第一个加数相比其他分法最小的方案。例如 10 10…

论文笔记:Ontology-enhanced Prompt-tuning for Few-shot Learning

论文来源&#xff1a;WWW 2022 论文地址&#xff1a;https://arxiv.org/pdf/2201.11332.pdfhttps://arxiv.org/pdf/2201.11332.pdf 论文代码&#xff1a;暂未公开 笔记仅供参考&#xff0c;撰写不易&#xff0c;请勿恶意转载抄袭&#xff01; Abstract 小样本学习旨在基于…

Linux——传输层协议

目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…

数据挖掘学习笔记:朴素贝叶斯 | Python复现

数据挖掘学习笔记&#xff1a;朴素贝叶斯 机器学习系列&#xff08;四&#xff09;&#xff1a;朴素贝叶斯&#xff08;华强买瓜版&#xff09; - yyxy的文章 - 知乎 十分钟&#xff0c;让你再也忘不掉贝叶斯分类 - VoidHaruhi的文章 - 知乎 《机器学习》&#xff08;西瓜书&am…

基于Arduino的简易收音机

DIY FM收音机&#xff1a;使用Arduino和Si4703模块打造 引言 在本项目中&#xff0c;我们将使用Arduino Nano和Si4703 FM调谐模块来构建一个功能完备的FM收音机接收器。这个易于跟随的指南非常适合想要深入无线电频率和无线通信世界的业余爱好者和电子爱好者。 Si4703模块是…

说下SSL/TLS四次握手过程?

参考自&#xff1a;SSL/TLS四次握手过程是怎么样的&#xff1f;HTTPS、SSL、TLS三者之间的联系和区别 一.SSL/TLS 简介 SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层&#xff0c;用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。 SSL 是 HT…

cuda编程模型

host和device&#xff1a; host&#xff1a;即CPU&#xff0c;CPU所关联的内存就叫host memorydevice&#xff1a;即GPU&#xff0c;GPU内的内存就叫device memory运行CUDA程序主要有三步&#xff1a;1&#xff09;host-to-device transfer&#xff1a;将数据从host memory拷到…

Qt(简介)

1. Qt简介 Qt是一个基于C的图形用户界面&#xff08;GUI&#xff09;框架&#xff0c;可以开发可视化人机交互程序&#xff0c;但是这并不是Qt的全部。Qt除了可以绘制漂亮的界面外&#xff0c;还包含很多其他的功能&#xff1a;多线程、数据库、图像处理、音视频处理、网络通信…

Python画笔案例-085 绘制 3D效果文字

1、绘制3D效果文字 通过 python 的turtle 库绘制 3D效果文字,如下图: 2、实现代码 绘制 3D效果文字,以下为实现代码: """3D效果文字.py """ import turtle# 给Turtle类增加addx和addy方法 turtle.Turtle.addx = lambda self,dx

OpenUAV:首个专为现实无人机视觉语言导航设计的大规模轨迹数据集,由大约 12k 个轨迹组成,涵盖了多种环境和复杂的飞行动态。

2024-10-10&#xff0c;由北京航空航天大学人工智能研究所、香港中文大学MMLab以及感知与交互智能中心共同创建了OpenUAV数据集&#xff0c;首个专为现实无人机&#xff08;UAV&#xff09;视觉语言导航&#xff08;VLN&#xff09;任务设计的大型轨迹数据集&#xff0c;该数据…

2023年云南省职业院校技能大赛(网络建设与运维赛项)

2023年云南省职业院校技能大赛 “网络搭建与应用”赛项样题 2023年8月 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;网络理论测试&#xff08;100分&#xff09; 第二部分&#xff1a;网络建设与调试&…

精准管理知识资产:十大内部知识库工具全解析

在当今竞争激烈的市场环境中&#xff0c;知识资产已成为企业核心竞争力的重要组成部分。为了更好地管理和利用这些宝贵的知识资源&#xff0c;选择合适的内部知识库工具至关重要。本文将为您介绍十款高效、实用的内部知识库工具&#xff0c;帮助您实现知识资产的精准管理。 1.…

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸&#xff08;DrawingDoc&#xff09;中的位置时&#xff0c;就是算不对&#xff0c;明明就4、5行代码&#xff0c;怎么看都是很“哇塞”的&#xff0c;毫无问题的。 但结果就是不对。 那就调试一下吧&#xff0c;调试后发现生成的矩阵很不对劲&#…

架构设计笔记-15-面向服务架构设计理论与实践

目录 知识要点 案例分析 1.微服务架构 2.微服务 3.微服务架构 4.SOA与微服务 5.基于微服务架构的系统/传统单体式系统 论文 1.论微服务架构及其应用 知识要点 服务组件体系结构&#xff08;Service Component Architecture&#xff0c;SCA&#xff09;是面向服务体系…