
方法一:last命令
# last reboot
reboot system boot 2632-431el6i Wed Jul 30 13:44 - 21:39 (46+07:55)
reboot system boot 2632-431el6i Sun Apr 13 14:28 - 09:27 (107+18:59)
reboot system boot 2632-431el6i Tue Mar 25 22:27 - 14:19 (18+15:52)
这条命令实际上显示的是最近几天的系统运行时间。last原本被设计来显示某个特定用户的登录历史。在Linux中,有一个特别的“伪用户”称为reboot会在系统重启的时候立即自动登录。这样通过检查reboot用户的登录历史,你就可以检查最后的重启时间。
方法二:who -b
使用who命令带上‘-b’选项。
# who -b
system boot Jul 30 13:44
方法三:uptime命令
你同样可以使用uptime命令来推断系统最后的启动时间。uptime命令会显示当前的时间,同样也会显示系统已经运行的时间。从这些信息中,你就可以计算系统最后启动的时间
对于app的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该app进程的情况),另一种是热启动,即app从被切换到前台(点back退出后再点击图标启动)。
从Android44(API 19)开始,可以从logcat获取activity的启动信息,如下我用应用宝做实验,可以看到如下的输出,从这里我们可以看到应用的这个activity启动用了639ms。
12-13 00:10:41331 855-957/ I/ActivityManager: [AppLaunch] Displayed Displayed comtencentandroidqqdownloader/comtencentassistantv2activityMainActivity: +639ms (total +751ms)
12-13 00:10:41331 855-957/ D/ActivityManager: AP_PROF:AppLaunch_LaunchTime:comtencentandroidqqdownloader/comtencentassistantv2activityMainActivity:639:50307447
这个log信息会在activity首次被绘制时输出,也就是如果activity栈里有这个activity,再启动不会输出该信息,典型的场景是通过recent task列表切换到其他activity再立即切换回来时。
log中的时间包括系统从开始处理启动activity的时间到完成运行layout和draw函数的时间,不包括点击icon到系统接收到消息的时间。显然,这个时间也不包括启动中异步UI绘制的时间。但是我们在测试中关注的其实是用户体验的启动时间,那么上面log中的时间就不能满足我们的需求了。
不过还好,既然是用户体验我们可以用更直观的方式,使用screenrecord进行屏幕录制然后分析视频。使用如下命令录制视频。
adb shell screenrecord –bugreport /sdcard/launchmp4
–bugreport参数会使视频输出一些时间信息和帧信息便于我们分析启动时间。activity启动后,使用ctrl+c结束视频录制,使用
adb shell pull /sdcard/launchmp4 /Users/xxx/Downloads/launchmp4
导出视频到电脑,使用可以按帧播放的视频软件打开(mac上quicktime就可以,win下可以用kmplayer),并按帧播放。
按帧播放视频,视频左上角会显示每一帧的时间(精确到ms)和帧数。在视频中会看到icon会变暗然后高亮,高亮时就是系统开始处理本次icon点击事件了。可以把这里作为点击时间,然后根据体验要求,看到app启动页完全绘制完作为终止时间,这个时间减去点击时间就是app的启动时间。
在进行app启动时间测试时,系统中运行的其他app会对启动时间有干扰,如果需要进行版本对比及竞品对比,最好要尽量保持环境一致,并反复执行多次取平均值。最后,不要忘了分别测试冷启动和热启动哦~
首先了解2个概念:
(1) Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的,第一个阶段就是Linux内核的启动,第二个阶段就是Android框架的启动(包括核心服务和程序)。
(2)Android的log系统是独立于Linux内核的log系统的。Linux内核通过printk打印的log信息,这些log写入到了/dev/kmsg文件中,在Shell终端可以通过dmesg命令查看这些log信息。Android框架则是通过Logger驱动打印log信息,这些log并没有归并到kmesg文件中,而是单独存储的,位于/dev/log目录下,在Shell终端可以通过logcat命令来查看。
下面我们分别从两种log信息中找到如何统计系统启动时间的方法。
1 通过dmesg信息统计系统启动时间
首先,我们通过dmesg命令抓取Linux内核的log信息(部分系统可能需要先执行 adb root):
$ adb shell dmesg > dmesgtxt
Linux内核启动完成,一般都有如下的标准输出信息:
<6> [ 6613861] Freeing init memory: 176K
因此,只要我们在dmesgtxt文件中找到 “Freeing init memory” 这一行即可,从上面的log可以看出,Linux内核启动只用了6613861s。
那么,如何找到Android系统启动完成的标志呢?
很多Android设备在系统启动完成后,会在内核log中打印如下信息:
<6>[ 29913726] init: processing action 0x96bb8 (property:sysboot_completed=1)
因此,找到 “boot_completed” 这一行也就得到了整个系统的启动时间了,从这一行可以看出,整个系统启动用了29913726s。
当然,并不是所有的Android设备都会打印出这条log,因此,我们一般用下面介绍的方法来专门统计Android系统的启动时间,
2 通过logcat统计系统的启动时间
文章开头我们已经介绍过,Android的log系统是独立于Linux内核log系统的,通过在终端输入adb shell 进入Android系统,cd到/dev/log目录,你会发现里面有四个文件,分别是:events,main,radio,system
Android系统把Log分为了四类,不同的类别记录不同的Log信息:
main - 主要的Log信息,大部分应用级别的Log信息都在这里
events - 系统事件相关的Log信息
radio - 无线/电话相关的Log信息
system - 低级别的系统调试Log信息
默认通过logcat抓取的是main信息,如果想抓取指定类别的log信息的方法,在logcat命令后加-b参数,例如:
$ adb logcat -d -v time -b "main" > maintxt
$ adb logcat -d -v time -b "events" > eventstxt
$ adb logcat -d -v time -b "system" > systemtxt
$ adb logcat -d -v time -b "radio" > radiotxt
1、在Windows10桌面,右键点击桌面底部的任务栏空白位置,然后在d出菜单中选择任务管理器菜单项。
2、在打开的任务管理器窗口中,点击性能选项卡,在这里可以看到电脑的正常运行时间。
以上就是关于Linux下如何得到系统最后一次启动时间全部的内容,包括:Linux下如何得到系统最后一次启动时间、怎么测试启动时间、如何统计系统的启动时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)