前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARTS-16-什么是应用性能监控APM

ARTS-16-什么是应用性能监控APM

作者头像
公众号_松华说
修改2019-07-30 13:14:08
5220
修改2019-07-30 13:14:08
举报
文章被收录于专栏:松华说松华说

ARTS的初衷

Algorithm: 主要是为了编程训练和学习。

Review:主要是为了学习英文

Tip:主要是为了总结和归纳在日常工作中所遇到的知识点。学习至少一个技术技巧。在工作中遇到的问题,踩过的坑,学习的点滴知识。

Share:主要是为了建立影响力,能够输出价值观。分享一篇有观点和思考的技术文章

https://www.zhihu.com/question/301150832

一、Algorithm

Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2] Example 2:

Input: nums = [1], k = 1 Output: [1] Note:

You may assume k is always valid, 1 ≤ k ≤ number of unique elements. Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.

代码语言:javascript
复制
class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        //桶排序,注意:桶长要比原数组长度大一
        List[] buckets = new List[nums.length+1];
        Map<Integer, Integer> counts = new HashMap<>();
        for(int num:nums) {
            counts.put(num,counts.getOrDefault(num,0)+1);
        }
        for (int num:counts.keySet()) {
            int count = counts.get(num);
            if(buckets[count]==null) {
                buckets[count] = new ArrayList();
            }
            buckets[count].add(num);
        }
        List<Integer> ans = new ArrayList<>();
        //从后往前找top k,i>=1 && ans.size<k
        for (int i=buckets.length-1;i>=1 && ans.size()<k;i--) {
            if(buckets[i]!=null) {
               ans.addAll(buckets[i]);
            }
        }
        return ans;
    }
  }

二、Review

以前的异常排查不管是通过发临时包、在线调试、QA复现,受多因素的影响,复现排查都麻烦,所以催生了应用性能监控APM。APM是负责监控和管理用户体验的工具,它不像崩溃报告仅仅收集错误信息。主要有两种收集和呈现数据的方式:代码级数据、Metric监控数据。代码级数据就是通过在软件中使用探针和事务跟踪获取到生产信息,这种方式综合性强

确保服务是启动运行状态还远远不够,响应变得缓慢发生的频率远高于程序崩溃,所以需要快速了解清楚问题是如何发生的。APM工具可以帮助开发团队快速了解一些常见问题,比如立即了解任何应用程序问题的根本原因,包括导致问题的确切代码行、方法、数据库或者具体的API调用,又或者了解并比较新版本部署对关键指标的影响,代码变化所引入的新问题和对性能的影响,还有APM可以帮助我们跟踪整体访问和流量高峰情况

APM就是利用数据来理解问题发生的原因,并尽可能提供最佳的用户体验,整个公司团队都从中受益,不管是在部署前、生产,还是部署后阶段。开发团队可以通过APM了解到软件质量,并提供更好的用户体验,测试团队可以通过APM进行压力负载测试并确保整个产品的一致性,运维团队可以通过APM进行性能监控,产品团队可以通过APM获得用户对新功能的欢迎程度反馈,业务负责人可以通过APM跟踪关键业务情况,如果有任何影响到业务增长的问题,他们会在第一时间得到,平均恢复时间MTTR因为性能问题得到更快修复而降低

APM服务收集了相当庞大的数据,但团队需要的是可操作的见解而不仅仅是报告,下面是一些常见的功能

1、完整的堆栈信息

了解清楚到底发生了什么才能更直接有效地处理问题

2、服务监控

基础性能监控CPU使用率、CPU平均负载、内存是必不可少的,依赖服务(如Mysql、Redis、Elasticsearch)调用时延(TP99)监控也很重要

3、事务跟踪

事务跟踪中如何翻译资源ID、记录点击事件是关键,不管采用何种编译插桩技术进行事务跟踪,都要保证自身的低性能消耗,绝不能拖慢服务本身

4、部署跟踪

通过部署跟踪确保所做的更改不会对页面性能产生负面影响,不要等到用户来反馈这些错误

5、数据可视化

走势、分布情况、火焰图等等图表,以更易于理解的格式呈现,也方便我们进行共性分析

6、灵活的告警

基于基线或者阀值的异常检测,然后通过不同渠道反馈到干系人

7、真实用户监控

真实用户监控可以帮助我们了解下面类似问题:用户加载响应差的具体页面是哪个、是什么原因导致了用户的问题、用户遭遇问题前的关键访问路径是什么、整个活动会话访问都是异常的还是个别页面异常、用户设备情况和网络上传下载速度(比如SSL建链首包时间)和LBS定位

8、崩溃报告

无日记信息的异常、只有系统日记的异常、被截断的异常对我们毫无意义,APM需要提供错误前后上下文,完整的方法调用堆栈信息和环境变量

翻译自:

https://medium.com/@raygunio/what-is-application-performance-management-9610315fd63

三、Tip

Kafka无消息丢失配置

1、不要使用producer.send(msg),而要使用producer.send(msg,callback) 2、设置acks = all,表明所有副本Broker都要接收到消息才算已提交 3、设置重试参数retries一个较大的值 4、设置unclean.leader.election.enable=false,避免落后太多的Broker参考leader的竞争 5、设置replication.factor>=3,表明消费保存份数 6、设置min.insync.replicas>1,表明消息至少要被写入到多少个副本才算是已提交 7、确保replication.factor>min.insync.replicas 8、设置enable.auth.commit=false,确保消息消费完成后再提交

作者BLOG:www.liangsonghua.me

作者介绍:京东资深工程师-梁松华,在稳定性保障、敏捷开发、JAVA高级、微服务架构方面有深入的理解

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松华说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
应用性能监控
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档