Android 性能優化 APM 平臺搭建(後端+運維+移動端)

因爲答應微信羣友分享 Android APM 平臺分享,不拖欠了,今天開始分享,不然發紅包,既然說了,就總結一下前陣子研究的 Android 性能監控平臺java

開發原因

  1. 微信張紹文大佬 《Android開發高手課》中提到 性能優化章節提到過,優化70% 依賴監控性能,30%須要治理,好比App 啓動時間第一次優化了 40%,期間升上來了,第二次又優化了40% ,因此須要性能監控平臺
  2. 期間找到業內分享最多的就是 流利說APM性能平臺大盤工程實踐 這篇文章,我參考這篇文章,實現瞭如下的效果,如圖下:
  3. 環境搭建能夠參考這篇文章: Prometheus+Grafana搭建監控系統 (須要懂一些後端知識)
  4. 集成 騰訊開源Matrix 監控啓動時間(最小版本爲19)

最基礎版效果圖

運維工具:Promethues+Grafana 後端: SpringBoot + MySQL+ Mybaties 移動端:Matrix android

APM 平臺分享

Promethues 與 SpringBoot集成問題

Promethues 與 SpringBoot 集成上報比較及時的數據,原本覺得就是拼接字符串便可,可是後來才發現須要集成 simpleclient_spring_boot 代碼,按照約定俗成的方法上報才能夠,若是你們作這方面,須要註冊避免這個坑。git

pom.xml 依賴:github

<dependency>
			<groupId>io.prometheus</groupId>
			<artifactId>simpleclient_spring_boot</artifactId>
			<version>0.1.0</version>
		</dependency>

		<dependency>
			<groupId>io.prometheus</groupId>
			<artifactId>simpleclient_hotspot</artifactId>
			<version>0.1.0</version>
		</dependency>
複製代碼

上報接口:spring

@Override
    public List<Collector.MetricFamilySamples> collect() {
        List<MetricFamilySamples> mfs = new ArrayList<>();

        String latestAppVersion = appMapper.getLatestAppVersion();

        // 當前上個版本應用大小
        GaugeMetricFamily pre_labeledGauge = new GaugeMetricFamily("app_pre_app_size", "previous android apk size", Collections.singletonList("labelname"));
        Integer preAppSize = appMapper.getPreAppSize(latestAppVersion);
        pre_labeledGauge.addMetric(Collections.singletonList("labelvalue"), preAppSize);

        // 當前當前版本應用大小
        GaugeMetricFamily labeledGauge = new GaugeMetricFamily("app_cur_app_size", "current android apk size", Collections.singletonList("labelname"));
        Integer curAppSize = appMapper.getCurAppSize(latestAppVersion);
        labeledGauge.addMetric(Collections.singletonList("labelvalue"), curAppSize);


        mfs.add(pre_labeledGauge);
        mfs.add(labeledGauge);
        return mfs;
    }
複製代碼

而後是 Promethues 配置:sql

global:
  scrape_interval: 10s
  scrape_timeout: 10s
  evaluation_interval: 10m
scrape_configs:
  - job_name: app
    scrape_interval: 5s
    // 時間輪訓查詢
    scrape_timeout: 5s
    // 監聽路徑接口
    metrics_path: /prometheus
    scheme: http
    static_configs:
      - targets:  ['127.0.0.1:8887']
  - job_name: setuptime
    scrape_interval: 2s
    scrape_timeout: 2s
    metrics_path: /setuptime
    static_configs:
      - targets:  ['127.0.0.1:8887']

複製代碼

Grafana 數據來源:

Grafana 數據源有兩種形式,比較實時性很是強的 Crash、 ANR、 內存泄露、 冷/熱啓動耗時、 關鍵頁面耗時 用 prometheus 上報,若是實時性比較弱的話,利用 Mysql 數據上報的形式來讀取。數據庫

MySQL 數據源

直接集成 MySQL ,流利說採用的是 MariaDB 的記錄,而後在 Grafana 配置以下: 後端

數據庫讀取

配置 Promethues 的數據源:

首先經過命令行 prometheus 啓動性能優化

./prometheus --config.file=prometheus.yml
複製代碼

添加數據源: 微信

MySQL 數據源和Prometheus 數據源配置
而後在顯示板配置顯示模板,即可以顯示出正常的數據,若是不熟悉可參考 環境搭建能夠參考 Prometheus+Grafana搭建監控系統

ToDoList

  1. Matrix-ApkChecker + Jekins 掃描打包分享
  2. 後臺源碼整理開源道Github
  3. ....
相關文章
相關標籤/搜索