之前介紹過oprofile的移植,現在通過一個例子介紹一下oprofile的使用。
?
1.先打開一個控制臺窗口(用來查看系統的CPU狀況)
?
2.進入手機shell打開oprofile
C:/Users/louieli.TENCENT>adb shell
# export PATH=/data/oprofile/bin:$PATH ? ? ? //設置環境變量
export PATH=/data/oprofile/bin:$PATH
# mkdir /dev/oprofile ? ? ? ? ? ? ? ? ? ? ?//Oprofile需要這個目錄
mkdir /dev/oprofile
# mount -t oprofilefs nodev /dev/oprofile ? ? //Oprofile會檢測oprofilefs是否存在
mount -t oprofilefs nodev /dev/oprofile
# opcontrol --init ? ? ? ? ? ? ? ? ? ? ? ? //初始化,只需要做一次
opcontrol --init
# mount -o remount rw / ? ? ? ? ? ? ? ? ?//修改根目錄為讀寫
mount -o remount rw /
# opcontrol --session-dir=/data/result --no-vmlinux --separate=lib ?//設置oprofile參數,只需要做一次
opcontrol --session-dir=/data/result --no-vmlinux --separate=lib
# opcontrol --start ? ? ? ? ? ? ? ? ? ? ?//啟動偵聽
opcontrol --start
Detected stale lock file. Removing.
Using default event: CPU_CYCLES:100000:0:1:1
Using 2.6+ OProfile kernel interface.
Using log file /data/result/samples/oprofiled.log
Daemon started.
Profiler running.
#
3.啟動我們的應用icu_app
4.啟動method profiling
?
?
5.讓我們的被測應用運行一會兒
6.依次停止method profiling和被測程序
被程序運行期間的Cpu占用
?
7.收集Oprofile數據
# opcontrol --dump ? ? //收集數據
opcontrol --dump
# opcontrol --stop ? ? //停止偵聽
opcontrol --stop
Stopping profiling.
# opcontrol --shutdown ?//關閉偵聽進程
opcontrol --shutdown
Killing daemon.
#
注意:如果要再次偵聽只需依次執行opcontrol --reset 和opcontrol --start即可
8.分析數據
?
先看一下占用最多CPU的是哪個程序
# opreport --session-dir=/data/result -t 5
opreport --session-dir=/data/result -t 5
CPU: ARM V6 PMU, speed 0 MHz (estimated)
Counted CPU_CYCLES events (clock cycles counter) with a unit mask of 0x00 (No unit mask) count 100000
CPU_CYCLES:100000|
??samples| ? ? ?%|
------------------
??3002706 59.1212 app_process
?? ? ? ?CPU_CYCLES:100000|
?? ? ? ? ?samples| ? ? ?%|
?? ? ? ?------------------
?? ? ? ? ?1919285 63.9185 libdvm.so ?(耗時最多)
?? ? ? ? ? 264603 ?8.8122 libandroid_runtime.so
?? ? ? ? ? 231639 ?7.7143 libc.so
?? ? ? ? ? 188271 ?6.2700 libskia.so
?? ? ? ? ??187691 ?6.2507 libicu_video.so (被測應用的so文件)
?? ? ? ? ? ?34843 ?1.1604 libcutils.so
?? ? ? ? ? ?27050 ?0.9009 libGLES_android.so
?? ? ? ? ? ?23593 ?0.7857 libbinder.so
?? ? ? ? ? ?21925 ?0.7302 libui.so
?? ? ? ? ? ?21419 ?0.7133 libutils.so
?? ? ? ? ? ?20870 ?0.6950 linker
?? ? ? ? ? ?20565 ?0.6849 libsurfaceflinger.so
?? ? ? ? ? ?14220 ?0.4736 libavcodec.so
?? ? ? ? ? ? 5030 ?0.1675 libpixelflinger.so
?? ? ? ? ? ? 4325 ?0.1440 copybit.msm7k.so
?? ? ? ? ? ? 2947 ?0.0981 libhardware.so
?? ? ? ? ? ? 2055 ?0.0684 libGLESv1_CM.so
?? ? ? ? ? ? 1914 ?0.0637 libEGL.so
?? ? ? ? ? ? 1801 ?0.0600 libm.so
?? ? ? ? ? ? 1490 ?0.0496 gralloc.msm7k.so
?? ? ? ? ? ? 1353 ?0.0451 libicuuc.so
?? ? ? ? ? ? 1244 ?0.0414 libz.so
?? ? ? ? ? ? ?913 ?0.0304 liblog.so
?? ? ? ? ? ? ?695 ?0.0231 libstdc++.so
?? ? ? ? ? ? ?687 ?0.0229 libsqlite.so
?? ? ? ? ? ? ?541 ?0.0180 libnativehelper.so
?? ? ? ? ? ? ?505 ?0.0168 sensors.hero.so
?? ? ? ? ? ? ?367 ?0.0122 libcrypto.so
?? ? ? ? ? ? ?314 ?0.0105 libicui18n.so
?? ? ? ? ? ? ?242 ?0.0081 librpc.so
?? ? ? ? ? ? ?125 ?0.0042 libgps.so
?? ? ? ? ? ? ? 69 ?0.0023 libhardware_legacy.so
?? ? ? ? ? ? ? 43 ?0.0014 libandroid_servers.so
?? ? ? ? ? ? ? 31 ?0.0010 libwpa_client.so
?? ? ? ? ? ? ? 14 4.7e-04 libssl.so
?? ? ? ? ? ? ? 10 3.3e-04 libmedia.so
?? ? ? ? ? ? ? ?8 2.7e-04 libstlport.so
?? ? ? ? ? ? ? ?5 1.7e-04 lights.hero.so
?? ? ? ? ? ? ? ?1 3.3e-05 app_process
?? ? ? ? ? ? ? ?1 3.3e-05 [heap] (tgid:10891 range:0xa000-0xa7000)
?? ? ? ? ? ? ? ?1 3.3e-05 libicu_audio.so ?(被測應用的so文件)
?? ? ? ? ? ? ? ?1 3.3e-05 libemoji.so
??1718004 33.8263 no-vmlinux
從上面的數據可以看到是libdvm.so占用了大部分的CPU時間,究竟libdvm.so在干嘛呢?我們可以通過traceview看到?
從圖上可以看出大部份的CPU時間都在做垃圾回收,現在我們就可以根據可能造成GC的情況進行排查,究竟是程序的原因,還是硬件配置的原因。
下面我們看看我們自己的so的執行情況,
# opreport --session-dir=/data/result -t 1 -l /data/data/com.tencent.IcuApp/lib/libicu_video.so
CPU: ARM V6 PMU, speed 0 MHz (estimated)
Counted CPU_CYCLES events (clock cycles counter) with a unit mask of 0x00 (No unit mask) count 100000
samples ?% ? ? ? ?image name ? ? ? ? ? ? ? symbol name
142223 ? 76.9068 ?libicu_video.so ? ? ? ? ?hloop
9377 ? ? ?5.0706 ?libicu_video.so ? ? ? ? ?vpx_codec_peek_stream_info
5178 ? ? ?2.8000 ?libicu_video.so ? ? ? ? ?QQ_UTIL::QQSocket::WaitEvent(unsigned short, unsigned long)
4764 ? ? ?2.5761 ?libicu_video.so ? ? ? ? ?rtp_timer_mgr::timer_theard_proc()
?
有了這些信息,我們就可以有針對性的對程序進行調優了。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
ps4龍珠哪個版本好玩?個人覺得PS 4 《龍珠格斗z》 ;的書很有趣!《龍珠斗士Z》是一個復雜而獨特的游戲。玩家可以通過互相競爭從中獲得足夠的樂趣。毫無疑問,它符合龍珠愛好者的期待,戰斗緊密連接了人物、動畫和幽默感的精髓,使其成為一種全新的戰斗體驗。ps4龍珠哪個版本好玩?ps4龍珠系列游戲推薦《龍珠Z卡卡羅特》,簡潔的系統,清爽的畫風,爽快的戰斗,經典的劇情。整個游玩過程很舒服,而且選擇了高...
怎么成為淘寶金牌賣家?獎牌賣家的基本條件有以下以下幾點:信用度最少一個站,15克黃油消費者購買基本保障最新計劃,店面21秒大于等于183天;5克白糖消保,這個現在已經不用擔心了以前淘寶天貓已經打開了全網第一消保計劃;開店43秒,這是人力物力不能整體控制的,除非直接買個淘寶網店。如何申請淘寶金牌賣家?遞交申請淘寶奧運金牌淘寶賣家的常見方法見下文淘寶店要繳交淘寶網保證金,開店把時間必須在183天以上,...
蘋果手機測距儀如何使用測田畝?蘋果 s手機自帶測量軟件。蘋果有個軟件叫測距儀 的手機。只要打開軟件,找到想要測量的位置所在的水平面,將手機移動到另一個水平面,軟件就會自動測量出這一段的距離。按照這種方法測量土地的長度和寬度后,就可以算出這塊土地的畝數了。這個軟件測出來的長度可以精確到小數點后兩位,所以這個軟件測出來的畝數還是很準確的。蘋果8p測距儀怎么用?首先打開手機自帶的測距儀。進入頁面后,按照...