应用程序性能分析方法(以ElasticSearch作为例子)

原则:性能调整在距离工作执行的地方越近越好

应用程序基础

需要了解应用程序的以下方面(以ES举例)

  1. 功能。分布式查询引擎
  2. 操作。查询、写入等等
  3. 配置。_cluster/settings和elasticseach.yml包含很多配置
  4. 指标。bulk time、QPS、线程池…
  5. 日志。系统日志、慢查询写入日志、gc日志
  6. 版本。7.9.1,新版本可能有性能提升的feature
  7. bugs。暂无
  8. 社区。中文和英文社区

常见的优化

需要找到常用的代码路径。应用的代码可能上百万行,随机找地方优化的效率太低。可以通过栈跟踪方法找到。java程序栈跟踪通常使用Async_profiler或Jprofiler

提高性能的常用方法

  1. 增加IO尺寸。每次IO都有固定开销(寻道时间),执行1次128KB的写入比执行128次1KB的写入效率更高。ES提供了异步的translog fsync策略,来增加IO尺寸
  2. 缓存。ES的查询就有多个查询缓存,例如request cache, filter cache
  3. 缓冲区。为提高写入性能,数据在写入下一层级前会先放到缓冲区中,这增加了IO大小。ES的refresh间隔可配置策略就是这个原理。
  4. epoll。轮询是在循环中等待时间状态的变化,存在CPU开销高昂、事件发生和下一次检查的延时较高的问题。epoll没有这样的性能负担。ES使用了netty框架处理网络请求,netty是基于reactor模型的
  5. 并行。利用多处理器加快处理速度。ES的shard查询执行就是并发的,并且在ESQL中并行的线程数增大了,支持segment级并行查询。
  6. 非阻塞IO。Netty使用了NIO
  7. 处理器绑定。线程在单一CPU执行能够提高内存本地性,减少内存IO,但可能会导致资源利用率下降。

垃圾回收的问题

  1. CPU成本
  2. stop-the-world导致的延迟

方法和分析

线程状态

  1. on CPU。使用CPU执行
  2. off CPU
    1. 睡眠
    2. 等待CPU
    3. 匿名换页
    4. IO

CPU剖析方法

等待CPU调度所花时间:sched stat\perf sched
匿名换页时间:delay accounting特性
其他的可以使用:jprofiler

USE方法

对于软件资源也可以使用USE方法查看成为瓶颈的软件资源。可以对软件资源的使用率、饱和度和错误进行考量。ES的线程池基础信息就是很好的例子,包含了线程池的active线程数(对应使用率);排队线程数量(对应饱和度);拒绝的请求数(对应错误)。
node_name name active queue rejected yg-data-rt-es0174 write 16 108 0 yg-data-rt-es0017 write 0 0 0 yg-data-rt-es0048 write 0 0 0 yg-data-rt-es0024 write 0 0 0

参考

《性能之巅》


http://www.niftyadmin.cn/n/5393959.html

相关文章

PreMaint CMS系统:数字化驱动起重机远程管理的智能未来

在港口起重机领域,数字化解决方案正成为提高效率、降低停机时间的关键。PreMaint CMS作为起重机核心可视化系统,融合了操作人员、维护团队和管理者的需求,通过智能化的方式,将复杂的数据转化为简洁的信息,实现对起重机…

MySQL-事务,properties文件解析,连接池

1.事务机制管理 1.1 Transaction事务机制管理 默认情况下是执行一条sql语句就保存一次,那么比如我们需要三条数据同时成功或同时失败就需要开启事务机制了。开启事务机制后执行过程中发生问题就会回滚到操作之前,相当于没有执行操作。 1.2 事务的特征 事…

点云数据处理常用外部库(C++/Windows)的项目配置

一、点云数据处理常用外部库(C版本)的下载安装与项目配置 (一)PCL 基于VS2019编程平台的PCL外部库下载安装及项目配置已有大量博客,本文不再赘述。具体下载安装及项目配置流程可参考外部库编译配置参考资料/*1*/ 。需…

dolphinscheduler集群部署教程

文章目录 前言一、架构规划二、配置集群免密登录1. 配置root用户集群免密登录1.1 hadoop101节点操作1.2 hadoop102节点操作1.3 hadoop103节点操作 2. 创建用户2.1 hadoop101节点操作2.2 hadoop102节点操作2.3 hadoop103节点操作 三、安装准备1. 安装条件2. 安装jdk3. 安装MySQL…

敏捷开发——第一次作业:个人简历/登录界面

1. 新建文件夹&#xff0c;用VScode打开 2. 新建文件&#xff0c;后缀设为.html 3. 感叹号自动生成框架&#xff0c; alt b&#xff1a;在默认浏览器中打开&#xff0c;shift alt ↓&#xff1a;向下复制一行 <ul> <li>&#xff1a;无序列表和列表项 <ol>…

QSettings使用示例

解决的问题&#xff1a; 平常要存储一些临时数据&#xff0c;或者ini的系统参数数据&#xff0c;以下是源码解析 如何实现&#xff1a; 实现的UI如下 主要功能&#xff1a; 初始化&#xff1a; m_settings new QSettings("DParamSetting.ini", QSettings::IniFo…

Python世界之运算符

一、算术运算符 以下假设变量&#xff1a; a10&#xff0c;b20&#xff1a; 运算符 描述 实例 加 - 两个对象相加 a b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结…

CSS 常见的 函数属性以及使用注意事项

CSS函数是一种用于简化CSS样式开发的工具&#xff0c;它们允许开发者执行一些特定的操作&#xff0c;如计算、自定义属性等&#xff0c;从而提高代码的可读性和可维护性。以下是CSS函数的一些示例和用法&#xff1a; attr()函数&#xff1a;返回选中元素的属性值。calc()函数&…