在我们进行软件、系统性能测量与优化的时候,经常会发现某个服务器或者虚拟机上,性能不正常了。想去抓取性能数据来分析定位的时候,因为很多工具默认是不安装的、而且有的时候也无法安装,没法及时抓取各种数据,然后就抓瞎了。
因此,实现了一个Dockerfile,包括了常见的各种Linux性能工具,包括perf、sar、vmstat、mpstat、iostat、top、htop、numastat、netstat、ss、ethtool、tcpdump等等。
以及,自带了生成火焰图的工具FlameGraph。
同时也包括了基于eBPF的工具集合BCC,通过BCC的工具集,可以更加精细、有针对性地来抓取数据。其中包括了:profile、offcputime、execsnoop、runqlat、runqlen、softirqs、hardirqs、opensnoop、filetop、cachestat、tcplife、tcptop、tcpretrans等等。
这样,事先编译这个Dockerfile:
$ cd perfkit
$ docker build --tag perfkit .
然后,把它导出成perfkit.img文件:
$ docker save -o perfkit.img perfkit:latest
在需要分析测量的Host上面(需要安装了Docker),导入之前的perfkit.img文件:
$ docker load < perfkit.img
然后运行这个容器,就可以随时随地开始抓取所需的性能数据了:
$ docker run --privileged -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro -v /sys/kernel/debug:/sys/kernel/debug:rw -v /etc/localtime:/etc/localtime:ro -it perfkit bash
这个Dockerfile是基于Ubuntu 22.04,也只在Ubuntu 22.04的Host上试过。
发现了什么问题、或者有什么建议,欢迎告诉我。
# perfkit
# Run: docker run --privileged -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro -v /sys/kernel/debug:/sys/kernel/debug:rw -v /etc/localtime:/etc/localtime:ro -it --pid=host perfkit bash
# Build Intermediate
ARG OS_IMAGE=ubuntu
ARG OS_VER=22.04
ARG DEBIAN_FRONTEND=noninteractive
FROM ${OS_IMAGE}:${OS_VER} as Intermediate
# Download, build and install bcc to intermediate image
RUN apt-get update && \
apt-get install -y python-is-python3 libclang-14-dev arping netperf iperf \
checkinstall bison build-essential cmake flex git libedit-dev libllvm14 \
llvm-14-dev zlib1g-dev libelf-dev libfl-dev python3-distutils wget
ARG BCC_VER=v0.25.0
ARG BCC_NAME=bcc-src-with-submodule.tar.gz
RUN wget https://kgithub.com/iovisor/bcc/releases/download/${BCC_VER}/${BCC_NAME} && \
tar xf ${BCC_NAME} && \
cd bcc && \
mkdir build && \
cd build && \
cmake -DCMAKE_INSTALL_PREFIX=/usr -DPYTHON_CMD=python3 .. && \
make && \
make install
# Build final image
ARG OS_IMAGE=ubuntu
ARG OS_VER=22.04
FROM ${OS_IMAGE}:${OS_VER}
LABEL Author="Yuchuan Wang, yuchuan.wang@gmail.com"
# Linux performance measurement and tuning tools:
# perf, sar, vmstat, mpstat, pidstat, iostat, free, top, htop,
# netstat, ethtool, ip, ss, nstat, nicstat, tcpdump, netperf, iperf,
# turbostat, numactl, numastat, slabtop
RUN apt-get -y update && \
apt-get install -y vim apt-utils pciutils psmisc linux-tools-common linux-tools-generic \
strace sysstat htop pstack numactl net-tools iproute2 nicstat ethtool tcpdump arping netperf \
iperf tcpreplay fatrace git python-is-python3 python3-distutils
# Flamegraph
ARG FLAME_REPO=https://github.com/brendangregg/FlameGraph.git
# Github is blocked by China GFW ridiculously
# so use this mirror instead in China for the case there is no ladder:
ARG FLAME_REPO=https://kgithub.com/brendangregg/FlameGraph.git
RUN git clone --depth 1 ${FLAME_REPO}
# Copy files to final image
COPY README.md /
# Copy BCC tools to final image
COPY --from=Intermediate /usr/share/bcc/ /usr/share/bcc/
COPY --from=Intermediate /usr/lib/ /usr/lib/
COPY --from=Intermediate /usr/include/bcc/ /usr/include/bcc/
# Add BCC tools to PATH
ENV PATH="${PATH}:/usr/share/bcc/tools/"