当前位置: 首页 > news >正文

Linux 性能优化:轻松入门



文章目录

  • 前言
  • 一、磁盘性能优化
    • 1、 磁盘 RAID 模式选择
    • 2、文件系统优化
  • 二、优化 CPU
    • 1、性能监控 :
    • 2、进程优先级调整 :
    • 3、进程与 CPU 绑定 :
  • 三、优化内存
  • 四、网络性能优化
    • 1、调整 TCP 缓冲区大小
    • 2、修改系统级别的文件描述符的数量
    • 3、调整 TCP 时间等待(TIME-WAIT)套接字的数量
    • 4、启用或调整 TCP 拥塞控制算法
    • 5、 禁用 ipv6 网络
    • 6、其他改善网络性能的方法
  • 总结


前言

  Linux 系统作为众多关键技术基础设施的 核心 ,其性能优化的重要性不言而喻。掌握 Linux 系统 性能优化 的策略和技巧,都是提升系统效率、保障服务稳定性的关键。本文将带领大家深入探索Linux系统性能优化的 多个维度 ,从磁盘的 RAID 模式选择到 CPU 和内存的精细调整,再到网络性能的全面提升,每一环节都旨在帮助您的系统达到更高的 运行效率


  大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞👍,给我一点鼓励吧!这对我来说很重要 (*^▽^*)

一、磁盘性能优化

1、 磁盘 RAID 模式选择

  系统优化是一个 持续 的过程,它涉及到硬件、软件以及它们之间的 交互 。磁盘阵列作为系统硬件的基础组成部分,在优化过程中扮演着关键角色。合理配置磁盘阵列不仅可以 提升系统性能 ,还可以根据应用需求实现成本效益和技术性能的最佳 平衡
  系统安装是构建任何服务平台的第一步。每一步都对系统的最终性能有着深远的影响。特别是磁盘阵列的配置,它决定了数据的存储方式、读写速度以及数据的安全性,常用的独立磁盘冗余阵列 (RAID) 模式有 RAID 0 (条带模式),RAID 1 (镜像模式), RAID 5RAID 6 (镜像校验模式),以及冗余增加 100% ,I/O 效率提升的 RAID 10 (镜像条带化模式)。根据业务场景可以参考以下思路进行优化:

  • RAID 0:适用于高速读写需求,无数据冗余,成本效益高,适合视频编辑、大数据分析等场景。
  • RAID 1:镜像双份数据,提供数据的高安全性,读写性能受限,适用于财务系统、医疗记录等对数据安全要求极高的业务。
  • RAID 5:分布式奇偶校验,提供数据安全同时优化读取性能,写入性能较低,适合Web服务器、邮件系统等读密集型应用。
  • RAID 6:双奇偶校验,进一步增强数据安全,可在两块硬盘故障时保护数据,适合需要高可靠性和数据冗余的数据中心。
  • RAID 10:结合镜像与条带化,提供高性能和数据安全,成本较高,适用于对读写性能和数据保护都有高要求的数据库系统。

   RAID 具体的各方面特点比较如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xaI3srhM-1721013974272)(https://i-blog.csdnimg.cn/direct/e19225da61a04017a864db46c4cefa62.png#pic_center =80%x)]

2、文件系统优化

  在 Linux 系统中,文件系统不仅是数据存储的基础设施,也是影响系统性能的因素之一。选择好的文件系统并对其进行细致的优化,可以进行数据存取效率方面的提升,并 降低延迟 ,提高系统的整体性能,
  不同的文件系统设计目标不同,如 ext4 适合多数通用场景, XFS 适合大数据量处理,选择易于管理和维护的文件系统也可以降低系统的 长期运营成本 ,以下同样是一些不同文件系统可以应用的场景提供给大家,作为优化的思路和方向:

  • Web应用通常需要快速响应和高并发处理能力,选择具有高 I/O 吞吐量的文件系统如XFS或Btrfs。
  • 数据库操作对数据的安全性和一致性要求高,ext4 的 journaling 模式或 XFS 的 WAL 特性是好的选择。
  • 大数据处理需要高效的读写性能和大文件支持,HDFS 或 Btrfs 可能更合适。
  • 视频和音频编辑需要高速读写和大文件处理能力,XFS 或专为 SSD 优化的文件系统如 F2FS 是优选。

  文件系统的优化是 Linux 性能优化中不可忽视的一环。通过细致的需求分析、明智的选择和恰当的配置调整,可以确保文件系统高效稳定地服务于应用需求,提升 Linux 系统的性能和响应速度。性能优化是一个持续的过程,需要根据系统的实际运行情况进行不断的评估和调整。


二、优化 CPU

  在Linux系统的性能优化中,CPU 优化是 核心 环节之一。CPU 作为计算的核心资源,往往是系统性能的瓶颈,特别是在计算密集型应用中,其性能的充分发挥对于整个系统的性能表现至关重要,优化CPU 性能可以 减少 进程等待时间, 提高 系统响应速度。
  CPU 优化思路是确保系统资源得到有效利用,在面对高负载或特定应用场景时,合理的优化方式可以显著提升系统性能,不过深入的了解 CPU 优化可能让人晦涩难懂,这里只提出几点容易 实现 的思路与方法:

1、性能监控 :

  通常可以使用工具如 top 、ps 和 pidstat 等监控 CPU 使用情况,对性能瓶颈进行识别,这时候我们需要清楚 CPU 使用率平均负载率 的区别,平均负载率是指单位时间内,指的是正在运行或等待 CPU 资源的进程,平均负载率不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
  有这样一种场景,发生在 I/O 密集型操作中,当系统进行大量的磁盘读写操作时,进程可能会因为等待 I/O 操作完成而 阻塞 ,导致平均负载升高,而 CPU 使用率却不高,而如果数据库查询时没有 索引 或存在 死锁 也可能出现同样的状况,这时候就需要根据脚本工具 甄别 系统 瓶颈

2、进程优先级调整 :

  使用 nice 和 renice 命令:通过 nice 命令可以在启动进程时设置其优先级,而 renice 命令可以调整正在运行的进程的优先级。例如,要将某个进程的优先级设置为 -10 (高优先级),可以使用 renice -10 pid 命令。

3、进程与 CPU 绑定 :

  使用 taskset 命令:taskset 命令可以将进程绑定到特定的 CPU 核心上,可以减少 CPU 的上下文切换,提高执行效率。例如,要将进程ID为 123 的进程绑定到 CPU 核心 2 上,可以使用 taskset -cp 2 123 (-c 指定 CPU -p 指定 PID 号),这样人为的调度进程对于一些核心业务可能会更加合理。


三、优化内存

  在任何系统中,内存资源都是有限的。随着应用程序的增多和数据量的增大,对内存的需求也随之增长。内存资源的优化至关重要,因为内存是影响系统性能的关键因素之一。内存不足会导致频繁的页面交换( Page Swapping ),进而降低系统响应速度和处理能力。页面交换是当物理内存不足时,操作系统将部分内存数据暂时存储到磁盘上的过程。
  这个过程会显著降低系统响应速度。通过优化内存,可以减少页面交换,提高系统的整体性能。内存优化通常是使磁盘 I/O 操作减少来提高能效。因为磁盘操作通常比内存操作消耗更多的能量,减少页面交换可以降低系统的整体能耗。
  一般来说,如果能不使用交换空间 ( swap ) 最好,因为磁盘 I/O 操作通常比内存慢很多,例如一条 64 位的 DDR4-3200 内存的数据传输速率可以通过以下计算得出:‌3200MT/s x 64bit / 8 = 25600MB/s = 25.6 GB/s。‌而现在通用的 PCIE 4.0 固态硬盘速度最高都只有 7000 MB/s 左右的读取速率,两者差距接近四倍。
  所以 Kubernetes 1.22 版本前不支持 Linux 节点上的交换空间,因为交换内存的使用会影响性能和资源管理。Kubelet 官方 建议 不使用交换空间,默认在检测到交换空间时无法启动。关闭交换空间可以避免性能下降,尤其是在性能敏感的环境下。尽管新版本改进了对交换空间的支持,但在追求高性能的场景中,关闭交换空间仍然是 推荐 的做法。接下来可通过以下命令关闭交换空间:

swapoff -a
# 关闭所有交换空间的挂载

sed -i '/swap/d' /etc/fstab
# 匹配删除所有 swap 交换空间挂载行

  如果业务临时需要交换空间的 冗余性 以对抗系统高负载情景,也可以通过优化 vm.swappiness 参数,它是 Linux 内核中用于控制内存和交换空间 使用倾向 的一个参数,决定了内核在内存紧张时使用交换空间的积极程度。它的取值范围是0到100,vm.swappiness = 0 时,内核将 尽可能少 地使用交换空间,同时优化以下参数也可以优化内存使用情况。
   vm.dirty_ratiovm.dirty_background_ratio 参数是 Linux 系统中控制内存中脏页(dirty pages)行为的两个关键内核参数。脏页是指那些已经 被修改过 并且需要 被写入 磁盘的 内存页 。这 2 个参数可以视为内存使用的 安全警戒线 。一旦内存中的脏页比例达到这个值,系统就会主动介入,确保数据及时被 "写回 到磁盘,防止内存被过度 占用 ,vm.dirty_background_ratio 则是针对后台进程,这两个参数默认值通常为 30%,10%。对于内存受限的系统,合理配置 vm.swappiness 可以防止 内存溢出 ,同时保持系统性能。有两种需要调整脏页比例的场景如下:

  • 应用服务数据较为重要 → 通常减少脏页比例,加快数据写入硬盘速度,提高数据安全性。
  • 在某些应用中数据重要性较低,可以接受数据丢失 → 增加脏页比例,加快内存响应速度。

  最后我们通过以下方法修改系统内核中交换倾向和脏页比例。

[root@ECS-TEST ~] echo "vm.swappiness = 0
vm.dirty_background_ratio = 50
vm.dirty_ratio = 80
" >> /etc/sysctl.conf[root@ECS-TEST ~] sysctl -p
vm.swappiness = 0
vm.dirty_background_ratio = 50
vm.dirty_ratio = 80# 脏页比例修改成功

四、网络性能优化

  在现代计算环境中,网络成为连接各种服务和应用的关键纽带。Linux 系统作为服务器或工作站,其网络性能直接影响到数据传输效率、服务响应速度和 用户体验 。网络延迟和带宽限制可能导致 服务中断 、数据包丢失,甚至 安全问题 ,网络性能也将成为限制系统整体性能的瓶颈。
  例如,在高并发场景下,如果网络处理能力不足,将导致请求 积压 ,影响服务的可用性和响应速度。因此,优化网络性能是确保 Linux 系统高效、稳定运行的 前提 。对网络性能的调优需要借助各种工具来了解系统的瓶颈,这里推荐 iperf3 广泛用于测试网络带宽和延迟,Netperf 支持多种网络性能测试, iftop 实时监控网络接口的流量,帮助识别流量高峰和异常流量模式,非常好用。通过工具 分析网络流量 和系统日志, 识别 网络性能的 瓶颈 是网络硬件、配置问题还是软件缺陷。由于篇幅原因,具体的使用方法就不多赘述,可自行了解。
  这里我专门收集了一些简单易上手的网络性能优化方法,在保证效果的同时也帮助大家了解 Linux 网络调优 的思路并入门。

1、调整 TCP 缓冲区大小

   TCP 协议的一个重要特性是它使用 缓冲区 来管理数据的发送和接收。缓冲区大小是指 TCP socket 为发送和接收数据保留的 内存空间大小 。在高带宽、 高并发 、或高延迟环境下,需要增大缓冲区,来提高 TCP 连接一次性发送的数据量,减少网络 往返次数 ,提高大数据传输的效率。
  但设置过大的缓冲区可能会导致内存浪费。如果缓冲区较小,接收方可能需要更频繁地处理数据包,这可能导致网络延迟。通过以下调整内核参数来指定 TCP socket 缓冲区的默认和 最大值

[root@TEST ~] echo "net.core.rmem_default=8388608" >> /etc/sysctl.conf
# TCP 套接字缓冲用于接受数据包的内存默认值,这里设置为 8 MB(8388608 字节)。[root@TEST ~] echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
# TCP 套接字缓冲用于接受数据包的内存最大值,这里设置为 16 MB,单个 TCP 连接的发送缓冲区也不会超过这个大小。[root@TEST ~] echo "net.core.wmem_default=68388608" >> /etc/sysctl.conf
# TCP 套接字缓冲用于发送数据包的内存默认值,设置为 8 MB[root@TEST ~] echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf
# TCP 套接字缓冲用于发送数据包的内存最大值,设置为 16 MB[root@TEST ~] sysctl -p
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_default=68388608
net.core.wmem_max=16777216

2、修改系统级别的文件描述符的数量

   增加文件描述符的数量可以允许系统打开更多的 网络连接 ,适用于高并发场景。但过高的值可能会消耗过多资源,我们可以适当提高系统打开文件描述符的最大值。

[root@TEST ~] echo "fs.file-max = 100000" >> /etc/sysctl.conf
[root@TEST ~] sysctl -p
fs.file-max = 100000

3、调整 TCP 时间等待(TIME-WAIT)套接字的数量

   TIME-WAIT 状态是 TCP 连接关闭过程中的最后一个状态,这个状态的目的是确保所有重复的或延迟的数据包都被 丢弃 ,避免它们干扰新的连接。在 TIME-WAIT 状态下,连接使用的本地端口和远程IP地址+端口对被保留,不能用于新的连接。
   net.ipv4.tcp_max_tw_buckets 用于设置 TIME-WAIT 套接字的最大数量,如果将 TIME-WAIT 状态参数调小,内核将更积极地清除 TIME-WAIT 状态的套接字。这可以减少它所占用的资源,加快端口的复用,从而允许更多的连接能够被快速建立。
   不过过多减少 TIME-WAIT 可能会引起IP地址冲突,导致新的连接建立失败或不稳定,调整这个参数之前,应该根据 实际 的网络流量和应用需求进行评估,以找到合适的 平衡点 ,我们可以大体可以调整为以下的值:

[root@TEST ~] sysctl -a | grep net.ipv4.tcp_max_tw_buckets
net.ipv4.tcp_max_tw_buckets = 8192  net.ipv4.tcp_congestion_control=bbr
# 这里我的默认 TIME-WAIT 状态套接字最大值为 8192,将它进行调低。[root@TEST ~] echo "net.ipv4.tcp_max_tw_buckets=5000" >> /etc/sysctl.conf
# 系统将尝试保持 TIME-WAIT 套接字的数量不超过这个值,超出的套接字将被更快地清除。[root@TEST ~] sysctl -p 
net.ipv4.tcp_max_tw_buckets=5000

4、启用或调整 TCP 拥塞控制算法

   网络传输过程中,一段时间内如果网络中对于服务器中资源的需求超过了该资源提供传输的最大部分,网络性能就会变坏,这时候系统就发生了 网络拥塞 ,即输入的负载大于系统最大的网络吞吐量 , TCP 拥塞控制算法是用于管理网络数据传输速率的机制,以避免网络拥塞和数据包丢失。TCP 协议通过这些算法动态调整其发送窗口大小,以适应网络条件。
  其中 BBR 是 Google 开发的一种新的 TCP 拥塞控制算法,它在 2016 年被引入 Linux 内核。 使用 BBR 算法的好处有:

  • 提高吞吐量:BBR 能够更有效地利用可用带宽,减少因拥塞导致的丢包和重传。
  • 减少延迟:通过更平滑的窗口大小调整,BBR 会减少数据传输的延迟。
  • 适应性强:BBR 算法适用于各种网络条件,包括高带宽延迟积(BDP)网络。

   最后我们通过一段例子来理解 BBR 算法时如何工作的。

   假设你拥有一个在线视频流服务,用户通过互联网连接观看视频。视频数据通过 TCP 连接从服务器传输到用户的设备。现在,我们考虑网络拥塞控制算法在这个过程中的作用。

  • 初始阶段 - 慢启动
    ① 当用户开始观看视频时,TCP 连接建立,拥塞窗口( cwnd )设置为一个最大报文段(MSS)大小。
    ② 服务器开始发送数据,由于是慢启动阶段,cwnd 逐渐按指数增长,每次收到一个 ACK,cwnd 增加一个 MSS 大小。

# 拥塞窗口 cwnd:TCP 协议用来控制数据发送速率的一个参数,它的大小表示了在任何时刻,发送方可以向接收方发送但还没有收到确认(ACK)的数据量。
# 最大报文段(MSS):TCP 中一个报文段的最大尺寸,也就是四层传输层 TCP 层一次能传输的最大数据量。MSS 是在 TCP 连接建立时,双方协商确定的,它取决于网络环境和接收方的处理能力。与 MTU (最大传输单元) 区别,MTU 为二层链路层一个数据帧的大小,通常规定为 1500 字节。

  • 拥塞避免阶段
    ① 当 cwnd 增长到一定程度(通常是慢启动阈值,ssthresh),进入拥塞避免阶段。
    ② 在这个阶段,cwnd 的增长速度变慢,按线性速率增长,每次收到 ACK,cwnd 增加 1/MSS大 小。

  • 检测到拥塞
    ① 如果在传输过程中发生了丢包,用户设备没有及时发送 ACK,服务器检测到超时或收到三个重复的 ACK(快速重传机制),认为发生了拥塞。
    ② 服务器将 ssthresh 设置为当前 cwnd 的一半,并重传丢失的数据包。cwnd 重置为一个 MSS 大小,再次进入慢启动阶段。

  • BBR 算法的介入
    ① 如果服务器使用了BBR算法,它将通过测量 ACK 的到达模式来估计网络的瓶颈带宽。
    ② BBR 算法会根据当前的带宽和 RTT (Round-Trip Time,往返时延) 动态调整 cwnd ,而不是简单地在丢包时减半。
    ③ BBR 会尝试维持一个稳定的队列大小,避免网络拥塞,同时充分利用可用带宽。

  • 结果
    ① 使用 BBR 算法的服务器能够更有效地 适应 网络条件的变化,例如带宽的波动或延迟的增加。
    ② 用户在观看视频时,体验更加流畅,因为 BBR 算法减少了因拥塞导致的缓冲和重传。
    ③ 视频流服务能够 处理 更多的并发用户,因为 BBR 算法优化了带宽的使用,减少了不必要的拥塞。

   通过这个例子,我们可以了解 TCP 拥塞控制算法如何帮助管理网络数据传输速率,避免拥塞,并确保数据包的 可靠传输 。BBR 算法作为其中的一种,通过智能的 窗口调整 ,提高了网络传输的效率和稳定性。

BBR 算法介绍:https://blog.csdn.net/weixin_41910694/article/details/117229422

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAKHv13E-1721013974276)(https://i-blog.csdnimg.cn/direct/2b373f64d9cc4a28bdc0301cb5660a3c.png#pic_center)]

引用来源:https://blog.csdn.net/love_668/article/details/116913790

   最后介绍了这么多,开启 BBR 拥塞算法的方式是十分简单的,只需要修改内核参数 net.ipv4.tcp_congestion_control 即可。


[root@TEST ~] echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
# 启用或修改 TCP 拥塞控制算法为 BBR[root@TEST ~] sysctl -p
net.ipv4.tcp_congestion_control=bbr

5、 禁用 ipv6 网络

  众所周知,IPv6 网络目前支持不完善,一些旧的软件或硬件可能不支持 IPv6,或者与 IPv6 的交互存在问题,IPv6 由于其设计,可能在某些配置中更容易受到某些类型的网络攻击,如邻居欺骗攻击,所以禁用 IPv6 可以减少潜在的攻击面,特别是在 IPv6 安全措施没有得到充分实施的情况下。
  如果网络环境中所有的通信都通过 IPv4 进行,且没有使用 IPv6 的需求,禁用 IPv6 可以减少配置的复杂性。禁用 IPv6 可以减少内核为 IPv6 维护的路由表和其他数据结构所需的内存,提高系统内存空间,修改以下内核参数可以进行 ipv6 网络的禁用。

# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1# 禁用 IPv6 路由和转发
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.default.forwarding = 0# 禁用 IPv6 自动配置
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0

6、其他改善网络性能的方法

  • 使用负载均衡 :为网络传输均衡技术,分散网络流量,避免单点过载,提高网络的吞吐量和稳定性。
  • 升级网络硬件 :更换更快的网络接口卡 (NIC)、使用更高性能的路由器和交换机,可以从硬件层面改善 Linux 系统网络性能。
  • 优化网络的物理布局 :减少网络设备之间的物理距离,使用高质量的网线和光纤,可以减少信号衰减和延迟。
  • 优化网络逻辑结构 :减少路由跳数,优化路由路径,确保数据包以最短的路径传输。
  • 使用 CDN(Content Delivery Network) :内容分发网络可以将内容缓存到离用户更近的服务器上,减少延迟和提高用户访问速度。
  • 实施网络分段和隔离 :通过将网络分割成多个虚拟局域网(VLAN),可以提高安全性和性能,防止广播风暴。
  • 优化应用程序的网络使用 :在应用程序层面,优化数据传输方式,减少不必要的网络请求,使用压缩和批量处理技术,如启用 Nginx 的 Gzip 压缩功能,提高 Web 服务性能的常用技术之一,尤其适用于文本内容较多的网站。通过减少传输的数据量,Gzip 压缩可以显著减少页面加载时间,提升用户体验。

总结

  在本文中,我们深入探讨 了Linux 系统性能优化的多个关键点,涵盖了磁盘 RAID 模式的选择、文件系统的优化、CPU 和内存的调整,以及网络性能的全面提升。通过这些细致的优化措施,我们不仅可以提高系统的运行效率,还能确保服务的稳定性和 响应速度
  通过本文的分享,我们希望能够帮助技术爱好者和系统管理员在面对 Linux 系统性能优化时,能够有更多的思路和方法。优化是一个 持续 的过程,需要不断地评估和调整以适应不断变化的应用需求和技术环境。希望您能从本文中获得有价值的信息,并将其应用于实践中,让您的系统运行得更加 流畅高效


  文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀



相关文章:

Linux 性能优化:轻松入门

文章目录 前言一、磁盘性能优化1、 磁盘 RAID 模式选择2、文件系统优化 二、优化 CPU1、性能监控 :2、进程优先级调整 :3、进程与 CPU 绑定 : 三、优化内存四、网络性能优化1、调整 TCP 缓冲区大小2、修改系统级别的文件描述符的数量3、调整 …...

C++相关概念和易错语法(22)(final、纯虚函数、继承多态难点)

1.final final在继承和多态中都可以使用,在继承中是指不想将自己被继承,在多态中是指不想该函数被重写,比较简单,下面是一些使用例子。 2.纯虚函数 当我们需要抽象一个类的时候,我们就需要用到纯虚函数。所谓抽象的类…...

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术:探索Flutter的Provider库 前言 上一篇文章中,我们详细介绍了 Flutter 应用中的状态管理,以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式:Provider。 Provider优缺点 基…...

玩转HarmonyOS NEXT之IM应用首页布局

本文从目前流行的垂类市场中,选择即时通讯应用作为典型案例详细介绍HarmonyOS NEXT的各类布局在实际开发中的综合应用。即时通讯应用的核心功能为用户交互,主要包含对话聊天、通讯录,社交圈等交互功能。 应用首页 创建一个包含一列的栅格布…...

GPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建

原文链接:GPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608565&idx3&snd4e9d447efd82e8dd8192f7573886dab&chksmfa826912cdf5e00414e01626b52bab83a96199a6bf69cbbef7f7fe…...

记录些MySQL题集(4)

1、数据库的三范式是什么? 第一范式:列不可再分 第二范式:在第一范式的基础上,要求数据库表中的所有非主键列完全依赖于主键,而不是仅依赖于主键的一部分 第三范式:满足第二范式的基础上,所有…...

pdf提取其中一页怎么操作?提取PDF其中一页的方法

pdf提取其中一页怎么操作?需要从一个PDF文件中提取特定页码的操作通常是在处理文档时常见的需求。这种操作允许用户选择性地获取所需的信息,而不必操作整个文档。通过选择性提取页面,你可以更高效地管理和利用PDF文件的内容,无论是…...

godot使用ws

go服务端 package mainimport ("encoding/json""fmt""github.com/gorilla/websocket""net/http" )var upgrader websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024, }// 处理函数 func handleWebSocket(w http.Respo…...

Windows FFmpeg 开发环境搭建

FFmpeg 开发环境搭建 FFmpeg命令行环境搭建使用FFmpeg官方编译的库Windows编译FFmpeg1. 下载[msys2](https://www.msys2.org/#installation)2. 安装完成之后,将安装⽬录下的msys2_shell.cmd中注释掉的 rem set3. 修改pacman 镜像源并安装依赖4. 下载并编译源码 FFmpeg命令行环境…...

链路聚合概述

目录 技术背景: 基本概念: 链路聚合的工作模式: 简介: 1)Manual Load-balance(手动负载分担) 简介: 配置实施: 2)LACP(链路聚合控制协议&#xff…...

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路: 找到链表的中间节点,然后逆置链表的后半部分,再一一遍历链表的前半部分和后半部分,判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…...

合成复用原则

合成复用原则 (Composite Reuse Principle, CRP) 合成复用原则(Composite Reuse Principle, CRP),也被称为组合/聚合复用原则,是面向对象设计中的一条重要原则。它的核心思想是:优先使用对象组合/聚合,而不…...

安卓自带camera hal3 实例README.md翻译

最近,遇到一个这样的问题,临时了解下这个驱动实现架构和特点,翻译如下 V4L2相机HALv3 camera.v4l2库使用视频Linux 2(V4L2)接口实现了camera HAL v3。这使得它在理论上可以与各种设备配合使用,尽管V4L2的…...

ActiViz实战:ActiViz中的自己实现鼠标双击事件

文章目录 1、添加鼠标事件2、网上实现双击事件的方式3、增加双击的时间限制4、补充说明1、添加鼠标事件 已知在C#中观察者/命令模式会报错,正常添加鼠标事件如下: private void VtkInteractorStyleTest() {vtkInteractorStyle style = vtkInteractorStyle.New();style.LeftB…...

Linux-交换空间(Swap)管理

引入概念 在计算机中,硬盘的容量一般比内存大,内存(4GB 8GB 16GB 32GB 64GB…),硬盘(512GB 1T 2T…)。 冯诺依曼的现代计算机结构体系里面的存储器就是内存 内存是一种易失性存储器&#xff0c…...

扫描某个网段下存活的IP:fping

前言: 之前用arp统计过某网段下的ip,但是有可能统计不全。网络管理平台又不允许登录。想要知道当前的ip占用情况,可以使用fping fping命令类似于ping,但比ping更强大。与ping需要等待某一主机连接超时或发回反馈信息不同&#x…...

【深度学习】PyTorch框架(3):优化与初始化

1.引言 在本文中,我们将探讨神经网络的优化与初始化技术。随着神经网络深度的增加,我们会遇到多种挑战。最关键的是确保网络中梯度流动的稳定性,否则可能会遭遇梯度消失或梯度爆炸的问题。因此,我们将深入探讨以下两个核心概念&a…...

Go-知识测试-子测试

Go-知识测试-子测试 1. 介绍2. 例子3. 子测试命名规则4. 选择性执行5. 子测试并发6. testing.T.Run7. testing.T.Parallel8. 子测试适用于单元测试9. 子测试适用于性能测试10. 总结10.1 启动子测试 Run10.2 启动并发测试 Parallel 建议先看:https://blog.csdn.net/a…...

.net core IConfiguration 读 appsettings.json 数据,举例

在.NET Core中,IConfiguration 接口是用来读取配置数据的,包括从 appsettings.json 文件中读取。下面是一个如何在使用.NET Core时通过 IConfiguration 读取 appsettings.json 数据的示例。 首先,假设你的 appsettings.json 文件内容如下&am…...

全球Windows机器蓝屏,作为量化人,我的检讨来了

昨天下午,微软给大家放了个假。Windows又双叒死机了。不过,这一次不是几台机器,而是全球大范围宕机。这一刻,大家都是“正蓝旗”。 蓝瓶的,效果好! 现在根本原因已经找到,绝大多数人的机器都已修…...

部署和运维

目录 1.Git1.1. Git指令中merge和rebase的区别1. Commit 记录2. 合并方式3. 冲突处理4. 使用场景选择建议 1.2. cherry-pick的使用如何使用 git cherry-pick例子处理冲突撤销 cherry-pick其他选项 结论 2. 部署1. Nginx的使用场景 编译打包1. webpack2. webpack打包优化1. 代码…...

微信小程序基本语法

官网 https://developers.weixin.qq.com/miniprogram/dev/framework/ 视频教程:尚硅谷微信小程序开发教程,2024最新微信小程序项目实战! 仿慕尚花坊项目源码:https://gitee.com/abcdfdewrw/flower-workshop 目录 一,初…...

测试用例的设计方法

等价类 等价类概念:在所有测试的数据中,具有某种共同特征的数据子集 边界值 边界值分析是对程序输入或输出的边界值进行测试的一种黑盒测试方法 边界值是作为等价类的补充,其主要区别是: 边界值测试设计不是从某一个等价类中…...

Android10.0 锁屏分析-KeyguardPatternView图案锁分析

首先一起看看下面这张图: 通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityMode inflate出来,并添加到界面上的。 我们知道,Pattern锁所使用的layout是 R.layout.keyguard_pattern_view&a…...

Python 装饰器:函数的函数,代码的艺术

引言 在Python中,装饰器是一种强大的功能,允许程序员在不修改原函数源码的情况下增强或修改函数行为。装饰器本质上是一个接收函数作为参数的高阶函数,并返回一个新的函数或修改原函数的行为。这种机制极大地提高了代码的复用性、可读性和模…...

安全防御2

实验要求: 实验过程: 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换): 新建电信区: 新建移动区: 将对应接口划归到各自区域: 新建…...

C语言 ——— 打印水仙花数

目录 何为水仙花数 题目要求 代码实现 何为水仙花数 “水仙花数”是指一个n位数,其各位数字的n次方之和等于该数本身 如:153 1^3 5^3 3^3,则153就是一个“水仙花数” 题目要求 求出0~100000的所有“水仙花数”并输出 代码实现 #i…...

「Conda」在Linux系统中安装Conda环境管理器

在Linux系统中安装Conda环境管理器是一个相对简单的过程。 1. 准备工作 确保你的Linux系统已经更新到最新版本,并安装了基本的开发工具和库。打开终端,执行以下命令: sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential2. 安装Miniconda或An…...

9.11和9.9哪个大?GPT-4o也翻车了

今天刷到了这个问题,心血来潮去问下chatgpt-4o,没想到疯狂翻车... 第一次问: GPT一开始给出了难绷的解答,让我想起了某短视频软件评论区里对某歌手节目排名的质疑哈哈哈哈哈 但是在接下来的进一步询问和回答中它反应过来了。 第…...

[开源]语雀+Vercel:打造免费个人博客网站

大家好,我是白露。 今天我想和大家分享我的今年的第一个开源项目 —— 基于语雀+Nextjs+Vercel实现免费的博客系统。 简单来说,你在语雀写博客,然后直接一键同步到个人网站上,网站自动部署! 而且,整个过程几乎不需要额外的成本,也不用充值语雀超级会员,hh。这个项目…...

一个专门做字画的网站/南宁seo推广优化

一. 常用命令 1. 编辑相关 ①. awk NF:字段总数NR:第几行数据FS:分隔字符 ②. sed -n-i 直接修改4a:在第四行后添加4i:在第四行前插入1,5c sting:用sting替换1到5行的内容s/要被替换的字符串/新的字符串…...

微信如何做模板下载网站/百度快照搜索引擎

说明: 有时候服务器是内网服务器,无法连接互联网,即无法使用互联网的yum源,这是如果安装salt的话会有一点麻烦,下面说下我是怎么做的。 第一步:使用虚拟机或者可以联网的服务器安装一遍salt,安装…...

泰安千橙网络/上海排名优化seo

一、PageRank的概念 PageRank,网页排名, 是一种由根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一, 它由Larry Page 和 Sergey Brin在20世纪90年代后期发明,并以拉里佩吉(Larry Page&#xf…...

网站弄论坛形式怎么做/百度官网登录

为什么80%的码农都做不了架构师?>>> 衡量程序的标准 衡量一个程序是否优质,可以从多个角度进行分析。其中,最常见的衡量标准是程序的时间复杂度、空间复杂度,以及代码的可读性、可扩展性。针对程序的时间复杂度和空间…...

五百亿网站搬家公司/青岛网站建设有限公司

在linux下,配置多个IP的话,通常是eth0.0.. eth0.1 ..eth0.x等等, 那么如果要配置大量的IP呢,这么配置也是可以的,但是繁琐,虽说这种情况很少。对于添加大量IP,有一定规定的,RHCE / C…...

云服务器哪家好/百度seo关键词排名价格

一.对象使用的高级 1,对象的key为字符串类型, value为任意类型 js var obj {name: "obj" } // 删除 delete obj.name // 添加 obj.age 18 // 如果age的key已存在就是修改值, 不存在就是添加键值对, 添加的key任意 // 注: 获取的页面元素(标签对象)也可以任意添加/…...