◆版權聲明:本文出自胖喵~的博客,轉載必須註明出處。html
轉載請註明出處:http://www.cnblogs.com/by-dream/p/5065083.htmllinux
前言shell
原本打算寫徹底部的自動化測試以後再寫性能測試的東西,可是想了想,以爲這兩個其實也能夠並行的來完成,因而今天打算開個頭,開始性能測試的介紹。服務器
須要強調的是這裏介紹的都是終端的性能,也就是Android設備的性能,不是客戶端併發以後服務器的性能數據,這一點必定要清楚。在這個系列裏面,我會介紹cpu、cpu時間片、電量、內存、FPS、流暢度以及流量和抓包,由於我提到這些指標GT均可以採集,所以在個人講解裏,會配合GT一塊兒來說。網絡
GT簡介併發
首先介紹一下什麼是GT。工具
GT是由騰訊無線研發部專項測試組研發的一款性能測試工具,官方網址是:http://gt.qq.com/index.html ,它的宗旨就是:隨身調試,僅需一部手機便可以完成性能數據的採集、日誌的查看、網絡數據包抓取等。Android的版本,除了使用GT的App能夠完成性能數據採集外,App自己還支持了廣播調用的方法,更加方便咱們調用它來直接取數據了,所以在這裏推薦這個工具給你們使用,能夠減小咱們不少重複獲取數據的工做量。性能
CPU採集學習
這裏主要介紹GT這個工具的採集方法。測試
一、選取你的被測應用:
若是是測App的性能的話,那麼第一步固然是選取你的被測應用(這裏咱們仍是以QQ爲例)。
圖1 圖2 圖3
經過圖3咱們能夠看到,咱們要測的應用QQ,已經被咱們選中了,注意QQ圖標的右邊的「com.tencent.moblieqq」就是QQ的 package name(包名),因此之後若是遇到一個App不知道它的包名,咱們就能夠藉助GT來獲得它的包名了。
二、勾選你的測試項:
選擇完被測App後,界面的下發就是要測試的幾個指標項:
圖4
前兩項是內存指標,後面咱們介紹;其餘指標中的第一項就是CPU,第二項Jiffes指的是CPU時間片,後面也會介紹。Net指的的流量,後面仍然會介紹,由於本次咱們以採集QQ操做過程當中CPU爲例,所以咱們須要勾選 CPU 這項:
三、進入「參數」tab頁面:
點擊下方的 「參數」 按鈕便可進入該頁面。
位置2的CPU表明的是整個手機當前的CPU使用率佔比;位置3表明的是當前應用佔整個手機的CPU的百分比(p.s.若是發現你沒有位置3的內容,那麼須要打開你的QQ便可。);當勾選了位置2或者位置3後面的複選框以後,點擊位置1的紅色按鈕,採集就開始了。注意:這裏位置3中包含兩條內容,這是由於QQ這個App啓動後一共有兩個進程,一個是後臺進程即PCP0,另外一個是咱們看到的QQ界面,它是一個前臺進程,通常咱們關注的就是這個應用的前臺進程。
四、開始採集
點擊上面提到的位置1小紅點後,就開始採集了。默認每1秒鐘採集一次,採集的總次數能夠在界面上看到:
點擊PCP1,能夠進入採集的詳情頁,該頁主要觀察一個平均值和總體曲線的一個走勢:
五、保存
在詳情頁面,咱們點擊右上角保存的圖標,便可完成保存。固然退到上一頁保存的話,保存的就是整個採集的數據。
保存的的文件 放在 /sdcard/GT/GW/com.tencent.mobileqq/qq/ 的目錄下:
導出來放到電腦上,用excel打開後就是這樣的形式:
這就是GT採集一個App CPU的整個過程。
shell獲取
因爲 Android 系統是基於 linux 內核開發的,所以咱們也可使用shell 中的top命令來獲取當前手機的CPU佔用和某個App的佔用。
在 shell 中輸入 top 便可開始監控當前手機的CPU,咱們看一下效果:
因爲輸入了top後,會不斷的進行刷新,所以咱們就使用 「 top -n 1 」 讓其只顯示一次結果就退出,咱們看一下一次top命令後都生成了些什麼:
第一行分別表明的是:
若是咱們想知道某個應用所佔的百分比,例如qq,那麼能夠看com.tencent.map那一行的第三列,就是當前這個應用在這一時刻所佔系統的百分比了。
一個Bug
學習了上面的兩種方法以後,咱們就能夠採集App在指定場景下的CPU佔用率了,可是我常常發現CPU的百分比是0%的狀況,有的時候是由於App確實在後臺,可能消耗的特別少,可是有的時候即便在前臺它也是0%的狀況。固然最終我知道了這是一個bug,咱們來看看究竟怎麼回事。下面是我採集的幾組數據:
圖中一共6組數據,用紅框框住的分別是第一組和第四組,每組數據兩行內容,第一行上面都提到了,再也不解釋,下面這一行表明的是各個狀態的cpu時間片(一般也用Jiffes這個概念來講明),咱們系統真正在計算CPU的時候就是:CPU的利用率就是用執行用戶態+系統態的Jiffies除以總的Jiffies來表示。而這個總的Jiffies就是咱們這裏看到的第二行的和。
咱們能夠看到第一組數據的Idle的值很是大,致使最終值很大,所以在1646855作爲分母去計算一個數的時候,獲得的值就會特別的小,所以就約等於爲0了;第四組數據呢,是因爲Idle是一個很是大的負值,所以致使最終的和變成了負值,那麼最終計算的商確定是負值,可是因爲CPU佔用不多是負值,所以當出現負值的時候,系統也就默認爲0了。而Idle的值之因此這麼異常,是由於Android 4.*系統在四核手機上的一個bug,在5.0系統上谷歌修復了這個bug。
那麼就會有一個問題,若是咱們非要在4.*的手機上看CPU的性能呢呢?那麼請看下一篇 cpu時間片。