0%

BootChart

BootChart 是用于 linux 启动过程性能分析的开源软件工具,它可以在内核装载后就开始运行,记录各个程序启动占用的时间、CPU以及硬盘读写,直到系统启动完成为止。

Android 高版本系统内置了 BootChart, 可以用于分析开机过程的进程状态, 日志抓取可以参考 Android 官方, 这里着重记录一下解析环境的搭建.

https://source.android.com/docs/core/perf/boot-times?hl=zh-cn#bootchart

安装

Ubuntu 18.x

Ubuntu 18.x 系统包管理器中预置了 BootChart, 直接安装即可使用, 但遗憾的是版本太低, 解析有的日志文件会出错.

1
sudo apt install pybootchartgui

安装完就可以通过 pybootchartgui bootchart.tgz 正常使用了.

Debian 11 / Ubuntu 18+

新版本的操作系统包管理器中已经没有 BootChart 了, 直接使用源码:

1
2
3
4
5
6
7
# 安装依赖
sudo apt install git pip python-is-python3 libcairo2-dev
pip install pycairo

git clone https://github.com/xrmx/bootchart.git
cd bootchart/pybootchartgui
cp main.py.in main.py

然后就可以通过 ./bootchart/pybootchartgui.py bootchart.tgz 来使用了.

其他

在系统源码 system/core/init/grab-bootchart.sh 有一个一键脚本, 可以参考其中逻辑来使用 BootChart 工具. 这里贴一个结合源码版本的改良版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
#
# This script is used to retrieve a bootchart log generated by init.
# All options are passed to adb, for better or for worse.
# See the readme in this directory for more on bootcharting.

TMPDIR=.
rm -rf $TMPDIR
mkdir -p $TMPDIR

LOGROOT=/data/bootchart
TARBALL=bootchart.tgz

FILES="header proc_stat.log proc_ps.log proc_diskstats.log"

# for f in $FILES; do
# adb.exe "${@}" pull $LOGROOT/$f $TMPDIR/$f 2>&1 > /dev/null
# done
(cd $TMPDIR && tar -czf $TARBALL $FILES)
~/bootchart-0.14.9/pybootchartgui.py ${TMPDIR}/${TARBALL}
#xdg-open ${TARBALL%.tgz}.png
echo "Clean up ${TMPDIR}/ and ./${TARBALL%.tgz}.png when done"

引用

Windows Subsystem for Linux(简称WSL)是一个在 Windows 10\11 上能够运行原生 Linux 二进制可执行文件(ELF格式)的兼容层。它是由微软与 Canonical 公司合作开发,其目标是使纯正的 UbuntuDebian 等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

阅读全文 »

最近给手头的 Xiaomi 6 刷了 LneageOS, 体验了一把 Android 13, 挺香的! 但是这个系统有那么一丢丢 BUG, 于是决定自己来改改.

环境描述

硬件要求

  • CPU >= 4C
  • MEM >= 16G
  • DISK >= 200G
  • NET >= 100M

软件描述

  • Debian 11.7
阅读全文 »

1
2
3
4
5
6
7
8
[url "ssh://username@gerrit.example.org:29418/"]
insteadof = ssh://gerrit.example.org/
[url "ssh://username@gerrit.example.org:29418"]
insteadof = ssh://gerrit.example.org:29418
[url "ssh://username@gerrit.example.org:29418"]
insteadof = http://gerrit.example.org:8080
[url "ssh://username@gerrit.example.org:29418"]
insteadof = http://UserName@gerrit.example.org:8080

在部署 OpenGrok 时, 场景需要对应用增加权限控制, 研究一番发现复用 Tomcat 的鉴权机制实现成本比较低, 这里记录一下实现过程.

开启 Tomcat 鉴权可以分为三步:

  • 配置权限数据源
  • 配置应用登录方式
  • 配置应用鉴权组
阅读全文 »

Linux 下通过 ln 命令可以方便的文件创建软/硬链接, 但对于目录就只能创建软链接了. 软链接只是一个快捷方式, 对于某些需要绝对路径的场景, 就不能很好的工作了.

阅读全文 »

周末在本地跳蚤市场花10块钱收了个 JLink, 拿回家一看竟然能用, 但是这个 JLinkSN-1, 手贱给写了个 00000001, 结果前面的 0 被忽略了, 再次写入又不能写, 强迫症受不了, 直接选择强刷重写.

阅读全文 »