Linux下如何得到系统最后一次启动时间

Linux下如何得到系统最后一次启动时间,第1张

方法一: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下如何得到系统最后一次启动时间、怎么测试启动时间、如何统计系统的启动时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9444748.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存