性能优化的大致策略

这篇具有很好参考价值的文章主要介绍了性能优化的大致策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

平时多多少少在工作中会遇到性能问题相关的工作,记录一下大致的思路以及方法。

1. 指导思想

抓大放小,可以采用两种方向:

一种是自底向上,先从操作系统发现某一现象,例如内存过高,负载过高,io过大等等,然后再逐渐到应用层找到引起该问题的代码。

另一种是首先在应用层的代码测通过code review发现大致问题,通过debug或者AB测试的方式,逐步在操作系统层面,通过一系列工具如top、free等等核对效果。

2. 常用排查策略

2.1 top

性能优化的大致策略

第一行

性能优化的大致策略

 第二行

性能优化的大致策略

第三行

性能优化的大致策略

 第四行

性能优化的大致策略

buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的,cache(缓存)是从CPU角度考虑,是为了提高cpu和内存之间的数据交换速度而设计的。简单来说,buff是即将要被写入磁盘的,而cache是被从磁盘中读出来的

第六行

性能优化的大致策略

 VIRT、RES、SHR详解

36. VIRT  --  Virtual Memory Size (KiB)
           The total amount of virtual memory used by the task.  It includes all code, data and shared libraries plus pages that have been swapped out and pages that have been mapped but not used.
17. RES  --  Resident Memory Size (KiB)   常驻内存
           The non-swapped physical memory a task is using.
21. SHR  --  Shared Memory Size (KiB)
           The amount of shared memory available to a task, not all of which is typically resident.  It simply reflects memory that could be potentially shared with other processes.

性能优化的大致策略

S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

负载的定义

在Linux中,进程分为三种状态,一种是阻塞的进程blocked process(等待I/O设备的数据或者系统调),一种是可运行的进程runnable process,另外就是正在运行的进程running process。进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行和准备好运行的进程的总数。

在多核处理中,你的负载均值不应该高于处理器核心的总数量

常用命令

K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽

s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s

m:切换显示内存信息

t:切换显示进程和CPU状态信息

c:切换显示命令名称和完整命令行

M:根据驻留内存大小进行排序

P:根据CPU使用百分比大小进行排序

2.2 ps

ps -efjH 进程间关系以树形图方式展示

ps -aux或ps -ef展示进程详细信息

2.3 iostat

iostat -x 5命令,表示开始监控输入输出状态,-x表示显示所有参数信息,5表示每隔5秒监控一次

2.4 netstat

netstat -anp

性能优化的大致策略

 

Local Address:本地地址

1) 0.0.0.0:2000:表示监听服务器上所有ip地址的2000端口(0.0.0.0表示本地所有ip)
2) :::2000:也表示监听本地所有ip的2000端口。和 0.0.0.0:2000 的 区别是这里表示的是 IPv6地址,0.0.0.0表示的是本地所有 IPv4地址。
3) ":::" 这三个 : 的前两个 "::" ,是 "0:0:0:0:0:0:0:0" 的缩写,相当于IPv6的 "0.0.0.0" 。表示本机的所有IPv6地址,第三个 : 是IP和端口的分隔符
4) 127.0.0.1:8080:表示监听本机的loopback地址的8080端口。如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问
5) ::1:9000:表示监听IPv6的回环地址的9000端口,::1这个表示IPv6的loopback地址

3. Foreign Address:外部地址

与本机端口通信的外部socket。显示规则与 Local Address 相同

State:状态

链路状态,共有11种。state列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。

状态参数主要有:

1) LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN。 来自远方TCP端口的连接请求
2) SYN_SENT:客户端通过应用程序调用connect进行active open。于是客户端tcp发送一个SYN以请求建立一个连接,状态置为SYN_SENT。 在发送连接请求后等待匹配的连接请求
3) SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN,状态置为SYN_RECV。 在收到和发送一个连接请求后等待对连接请求的确认
4) ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了。 代表一个打开的连接,数据可以传送给用户
5) FIN-WAIT-1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态。 等待远程TCP连接中断请求,或先前的连接中断请求的确认
6) CLOSE-WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT。 等待从本地用户发来的连接中断请求
7) FIN-WAIT-2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2。 从远程TCP等待连接中断请求
8) LAST-ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK,这就进入了LAST-ACK。 等待原来发向远程TCP的连接中断请求的确认
9) TIME-WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。 等待足够的时间以确保远程TCP接收到连接中断请求的确认
10) CLOSING:比较少见。 等待远程TCP对连接中断的确认
11) CLOSED:被动关闭端在接受到ACK包后,就进入了closed的状态。 链接结束,没有任何连接状态
12) UNKNOWN:未知的Socket状态

2.3 SWAP

swap相关的讲解详见【转载】Linux SWAP 深度解读 - 知乎

调整SWAP大小的方式如下:
 文章来源地址https://www.toymoban.com/news/detail-453294.html

#查看内存使用情况
free -h

# 关闭分区
swapoff -a

# 开启分区
swapon -a


# 创建一个2*1G的空间,用于swap
dd if=/dev/zero of=/etc/swapfile bs=1G count=2


#转换为swap分区
mkswap /etc/swapfile

#激活新生成的swap分区
swapon /etc/swapfile

#如果需要重启后也继续存在,修改/etc/fstab,增加如下内容
/home/swapfile swap swap defaults  0 0

到了这里,关于性能优化的大致策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt 性能优化】 理解与优化Qt信号槽机制 - 提升应用性能的关键策略

    在这个科技日新月异的时代,软件开发不仅仅是编写代码,更是一种艺术。正如著名计算机科学家 Edsger Dijkstra 所说:“计算机科学并不仅仅关于机器,而是更多地关于人的智慧。” Qt框架,作为一个深受广大开发者喜爱的跨平台应用程序和用户界面开发框架,其核心机制之

    2024年02月20日
    浏览(56)
  • [ARM 汇编]高级部分—性能优化与调试—3.4.1 性能分析与优化策略

    性能优化是嵌入式系统开发中的一个重要环节,尤其是在资源受限的环境下。性能优化的目标是提高代码执行速度、降低功耗和减少内存占用。在本章节中,我们将讨论性能分析与优化策略,并通过实例来学习如何应用这些策略。 性能分析方法 要优化程序性能,首先需要分

    2024年02月10日
    浏览(54)
  • Redis10大性能优化策略(下)

    1)尽量不使用 O(N) 以上复杂度过高的命令,对于数据的聚合操作,放在客户端做。 2)执行 O(N) 命令,保证 N 尽量的小(推荐 N = 300),每次获取尽量少的数据,让 Redis 可以及时处理返回。 一般有两种方案来规避这个问题: 1.集中过期 key 增加一个随机过期时间,把集中过期

    2024年02月13日
    浏览(45)
  • 性能优化和可伸缩性策略:如何制定优化和可伸缩性策略并实施计划

    作者:禅与计算机程序设计艺术 随着互联网业务的不断发展,应用场景也越来越多样化、功能更加复杂、业务规模扩张速度越来越快,如何应对不断变化的业务环境和用户需求,保证服务质量,确保业务持续运行?性能优化和可伸缩性策略(POPS)就是为了解决这些问题而生

    2024年02月09日
    浏览(39)
  • Elasticsearch性能优化:实战策略与最佳实践

    -在数据密集型的应用场景中,Elasticsearch作为一个强大的搜索和分析引擎,能够提供快速的搜索能力和处理大规模数据的能力。然而,随着数据量的增长和查询需求的复杂化,对Elasticsearch的性能优化成为了维护高效、稳定服务的重要任务。本文将深入探讨Elasticsearch的优化策略

    2024年04月23日
    浏览(42)
  • 主播直播美颜SDK:性能优化策略

    当下,主播直播美颜SDK成为了越来越多主播的利器。这些SDK可以实时美化主播的外貌,提高视觉吸引力,但同时也需要处理大量的图像数据。因此,性能优化成为了不可或缺的一环。本文将探讨主播直播美颜SDK的性能优化策略,以确保高质量的实时美颜效果。 一、了解性能瓶

    2024年02月06日
    浏览(43)
  • 提升应用性能的关键步骤——UniApp性能优化策略与技巧详解

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 chatgpt体验地址 描述:代码压缩和混淆是常用的性能优化手段。通过减小JavaScript、CSS和HTML文件的大小,可以降低加载时间和网络传输。 解释: 在构建UniApp应用时,确保开启代码压缩和混淆选项。 使用工具(如

    2024年02月03日
    浏览(50)
  • 前端面试:【网络协议与性能优化】提升Web应用性能的策略

    嗨,亲爱的Web开发者!构建高性能的Web应用是每个开发者的梦想。本文将介绍一些性能优化策略,包括资源加载、懒加载和CDN等,以帮助你提升Web应用的性能。 1. 性能优化策略: 压缩资源: 使用Gzip或Brotli等压缩算法来减小CSS和JavaScript文件的大小,加快加载速度。 合并文件

    2024年02月11日
    浏览(41)
  • 学习Vue:响应式原理与性能优化策略

    性能优化是Vue.js应用开发中的一个关键方面,而深入了解响应式原理并采用有效的性能优化策略可以显著提升应用的性能。本文将解释响应式原理并介绍一些性能优化策略,旨在帮助您构建高性能的Vue.js应用。 Vue.js的响应式原理是通过利用 Object.defineProperty 或 Proxy 来追踪数据

    2024年02月11日
    浏览(34)
  • 性能测试大致分为以下六种

    性能测试大致分为以下六种:   第一种是Benchmark(标杆测试)又叫基准测试,主要是测试一些基础数据,给进一步建立性能模型提供依据,一般测试人员按照1并发用户来执行脚本,校验脚本正确与否,为之后的压力测试和负载测试做准备;   第二种是Load(负载测试),对照

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包