日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

java -jar 启动优化_Android 8.1 启动时间优化--耗时分析

發布時間:2024/10/12 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java -jar 启动优化_Android 8.1 启动时间优化--耗时分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前分析各個部分耗時,都是通過分析log,在SecureCRT中設置時間戳,打印出如下log

[ ? 22.266201] c1 [saudio] saudio_wait_monitor_cmd error -5

[ ? 22.266205] c1 sblock_receive:sblock-5-13 not ready!

[ ? 22.266209] c1 [saudio] Error: sblock_receive dst 5, channel 13 result is -5

[ ? 22.266226] c1 [saudio] saudio_wait_monitor_cmd error -5

[ ? 22.266229] c1 sblock_receive:sblock-5-17 not ready!

[ ? 22.266232] c1 [saudio] Error: sblock_receive dst 5, channel 17 result is -5

[ ? 22.302337] c3 init: Parsing file /system/etc/init/ims_bridged.rc...

[ ? 22.309790] c3 init: Parsing file /system/etc/init/init-debug.rc...

[ ? 22.316932] c3 init: Parsing file /system/etc/init/installd.rc...

---------------------

有效,但數據不全面,不利于分析。百度到了bootchart這個工具,很實用。

1) bootchart工具

在Android O當中,bootchart已經默認集成在Init當中。所以收集數據可以用以下步驟:

只需要你通過開關打開即可生效:“adb shell ‘touch /data/bootchart/enabled’”

重啟設備

$ANDROID_BUILD_TOP/system/core/init/grab-bootchart.sh抓取數據生成一張png圖片,即可進行分析。

sp8541e_srvm:/data/bootchart $ tar -czf bootchart.tgz enabled header proc_diskstats.log proc_ps.log proc_stat.log

adb pull /data/bootchart/bootchart.tgz .\Desktop\

拷貝bootchart.tgz 到Ubuntu服務器上

Ubuntu服務器上 sudo apt-get install bootchart

bootchart bootchart.tgz

命令結束后就生成對應的png圖片。

但是如果碰到bootchart工具不能使用的情況,就需要自己下載bootchart源碼:http://www.bootchart.org/download.html,解壓后:

1. ant編譯

2. java -jar bootchart.jar ../bootchart/bootchart.tgz 生成分析結果圖片:

3.

在這里總結下最重要的三步

echo 120 > /data/bootchart/start

tar -czf bootchart.tgz bootchart.tgz enabled header proc_diskstats.log proc_ps.log proc_stat.log

bootchart bootchart.tgz

通過這三步基本上可以獲取到開機信息的圖片了

從這張啟動圖片里,我們能夠看到:

1. 總共的啟動時間是30s,這里指的是從kernel開始啟動的時間開始計時,一直到Android 啟動結束.

2. Init 進程一直到13s左右才是啟動其他進程,如ueventd。

3. Zygote64/Zygote進程大約在22s左右啟動。

4. 這樣計算下來Android fw的啟動時間大致為8s左右。

這樣看起來就比較清晰了,Init進程13秒才開始工作的原因是什么?這個時間如果能縮短的話啟動時間會效果很顯著。

通過dmesg信息,可以看到:

[32m[ 13.227842] [0m[33minit[0m: init second stage started!

[32m[ 13.237508] [0m[33mselinux[0m: SELinux: Loaded file_contexts\x0a

[32m[ 13.243342] [0m[33mselinux[0m: SELinux: Loaded property_contexts from /plat_property_contexts & /nonplat_property_contexts.\x0a

[32m[ 13.254522] [0m[33minit[0m: Running restorecon…

[32m[ 13.593214] [0m[33mselinux[0m[31m: SELinux: Could not stat /dev/block: No such file or directory.\x0a[0m

[32m[ 13.601607] [0m[33minit[0m[31m: waitpid failed: No child processes[0m

[32m[ 13.606477] [0m[33minit[0m: Couldn’t load properties from /system/etc/prop.default: No such file or directory

[32m[ 13.615416] [0m[33minit[0m: Couldn’t load properties from /prop.default: No such file or directory

[32m[ 13.623768] [0m[33minit[0m: Couldn’t load properties from /odm/default.prop: No such file or directory

[32m[ 13.631946] [0m[33minit[0m: Couldn’t load properties from /vendor/default.prop: No such file or directory

[32m[ 13.641126] [0m[33minit[0m: Created socket ‘/dev/socket/property_service’, mode 666, user 0, group 0

[32m[ 13.648925] [0m[33minit[0m: Parsing file /init.rc…

[32m[ 13.653220] [0m[33minit[0m: Added ‘/init.environ.rc’ to import list

[32m[ 13.658291] [0m[33minit[0m: Added ‘/init.usb.rc’ to import list

[32m[ 13.663329] [0m[33minit[0m: Added ‘/init.angler.rc’ to import list

[32m[ 13.668660] [0m[33minit[0m: Added ‘/vendor/etc/init/hw/init.angler.rc’ to import list

[32m[ 13.675611] [0m[33minit[0m: Added ‘/init.usb.configfs.rc’ to import list

[32m[ 13.681379] [0m[33minit[0m: Added ‘/init.zygote64_32.rc’ to import list

[32m[ 13.688215] [0m[33minit[0m: Parsing file /init.environ.rc…

[32m[ 13.692099] [0m[33minit[0m: Parsing file /init.usb.rc…

[32m[ 13.696775] [0m[33minit[0m: Parsing file /init.angler.rc…

[32m[ 13.701323] [0m[33minit[0m: Added ‘init.angler.usb.rc’ to import list

[32m[ 13.706678] [0m[33minit[0m: Added ‘init.angler.diag.rc’ to import list

[32m[ 13.712305] [0m[33minit[0m: Added ‘init.angler.sensorhub.rc’ to import list

[32m[ 13.719668] [0m[33minit[0m: Parsing file init.angler.usb.rc…

[32m[ 13.724264] [0m[33minit[0m: Parsing file init.angler.diag.rc…

確實是13s左右init進程才開始工作。所以第一步我們來想辦法把這個時間看看能不能縮短。

通過這個工具,我們能夠大致清楚了從系統啟動到Android啟動完成后的主要時間,同時也能夠簡單的分析出kernel啟動時間,zygote啟動時間,sysetmserver啟動時間,但是這個工具還是不能把Android 啟動階段畢竟清晰的展現出來,這個時候就需要使用到第二個工具了。

2) boot mesg

我們很高興的可以看到在Android中已經加入了一系列的mesg,我們可以通過這一系列的mesg可以抓出android fw啟動的相關時間。

到此為止,我們大致能夠得出android 啟動的每個階段所耗費的時間了,后續我們來仔細分析每個階段的代碼,看看都干了啥。

第一步,關閉kernel log輸出:

65 int console_printk[4] = {

66 ? ? ? ? 0,//DEFAULT_CONSOLE_LOGLEVEL, ? /* console_loglevel */

67 ? ? ? ? 0,//DEFAULT_MESSAGE_LOGLEVEL, ? /* default_message_loglevel */

68 ? ? ? ? 0,//MINIMUM_CONSOLE_LOGLEVEL, ? /* minimum_console_loglevel */

69 ? ? ? ? 0,//DEFAULT_CONSOLE_LOGLEVEL, ? /* default_console_loglevel */

70 };

簡單粗暴,全部關閉掉,重新編譯boot.img測試下,快了將近10s.。。。

通過查看dmesg:

[32m[ ? ?5.276684] [0m[33minit[0m: Parsing file /init.rc...

[32m[ ? ?5.276945] [0m[33minit[0m: Added '/init.environ.rc' to import list

[32m[ ? ?5.276959] [0m[33minit[0m: Added '/init.usb.rc' to import list

[32m[ ? ?5.276978] [0m[33minit[0m: Added '/init.angler.rc' to import list

[32m[ ? ?5.276997] [0m[33minit[0m: Added '/vendor/etc/init/hw/init.angler.rc' to import list

[32m[ ? ?5.277010] [0m[33minit[0m: Added '/init.usb.configfs.rc' to import list

[32m[ ? ?5.277026] [0m[33minit[0m: Added '/init.zygote64_32.rc' to import list

[32m[ ? ?5.278233] [0m[33minit[0m: Parsing file /init.environ.rc...

[32m[ ? ?5.278331] [0m[33minit[0m: Parsing file /init.usb.rc...

[32m[ ? ?5.278675] [0m[33minit[0m: Parsing file /init.angler.rc...

[32m[ ? ?5.278851] [0m[33minit[0m: Added 'init.angler.usb.rc' to import list

[32m[ ? ?5.278865] [0m[33minit[0m: Added 'init.angler.diag.rc' to import list

[32m[ ? ?5.278878] [0m[33minit[0m: Added 'init.angler.sensorhub.rc' to import list

[32m[ ? ?5.280094] [0m[33minit[0m: Parsing file init.angler.usb.rc...

[32m[ ? ?5.280726] [0m[33minit[0m: Parsing file init.angler.diag.rc...

[32m[ ? ?5.280817] [0m[33minit[0m: Parsing file init.angler.sensorhub.rc...

[32m[ ? ?5.280908] [0m[33minit[0m: Parsing file /vendor/etc/init/hw/init.angler.rc...

[32m[ ? ?5.280934] [0m[33minit[0m[31m: could not import file '/vendor/etc/init/hw/init.angler.rc' from '/init.rc': No such file or directory[0m

[32m[ ? ?5.280951] [0m[33minit[0m: Parsing file /init.usb.configfs.rc...

[32m[ ? ?5.281447] [0m[33minit[0m: Parsing file /init.zygote64_32.rc...

[32m[ ? ?5.281581] [0m[33minit[0m: Parsing file /system/etc/init...

[32m[ ? ?5.281607] [0m[33minit[0m: Parsing file /vendor/etc/init...

[32m[ ? ?5.281632] [0m[33minit[0m: Parsing file /odm/etc/init...

[32m[ ? ?5.281702] [0m[33minit[0m: processing action (early-init)

[32m[ ? ?5.282227] [0m[33minit[0m: starting service 'ueventd'...

[32m[ ? ?5.282722] [0m[33minit[0m[31m: failed to open /acct/uid_0/pid_330/cgroup.procs: No such file or directory[0m

[32m[ ? ?5.282756] [0m[33minit[0m[31m: createProcessGroup(0, 330) failed for service 'ueventd': No such file or directory[0m

[32m[ ? ?5.282980] [0m[33minit[0m: processing action (wait_for_coldboot_done)

[32m[ ? ?5.283890] [0m[31mmsm_rng:Data not available![0m

[32m[ ? ?5.284876] [0m[33mueventd[0m: ueventd started!

發現Init進程確實提前到kernel啟動5s左右。。

參考:

https://blog.csdn.net/ljp1205/article/details/78360701

https://blog.csdn.net/qqxiaoqiang1573/article/details/56839031

總結

以上是生活随笔為你收集整理的java -jar 启动优化_Android 8.1 启动时间优化--耗时分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。