把原始几条命令整理成一条最短分析链路:先看符号和编译单元,再结合段大小与进程映射判断体积主要花在哪。
1. 先按符号看体积占比
当你想先知道“到底是哪些函数 / 符号最占空间”时,可以直接看 symbols 维度:
bloaty -d symbols -n 0 libmicontinuity.so > 2.txt
-d symbols:按符号维度展开-n 0:不限制输出条数2.txt:把结果落盘,方便后续排序或对比
2. 再按编译单元看体积来源
如果你已经知道问题大概出在某个模块,而不是某个具体符号,更适合切到 compileunits:
bloaty -d compileunits -n 0 libsimple_decoder.so > compileunits.txt
这一步适合回答两个问题:
- 哪个源文件 / 编译单元贡献了最多体积
- 是否某个模块整体被意外拉大了
3. 看各个段的占比
如果怀疑不是单个函数的问题,而是 .text、.rodata、.data、.bss 这类段整体偏大,可以直接看段级统计:
~/.toolchain/sdk_package_MC01/toolchain/bin/aarch64-openwrt-linux-size -A ./libmicontinuity_sdk.so.1.0.4032716
这一步更适合快速判断:
- 代码段是否明显膨胀
- 只读数据是否异常增大
- 某些静态对象是否把数据段撑大了
4. 结合 smaps 看运行时占用
二进制文件本身体积和进程实际映射占用不完全是一回事。 如果你要继续确认“进程里到底是哪几个库占得多”,可以再看:
cat /proc/$pid/smaps
cat /proc/$pid/status
更适合关注:
- 各个 so 的映射大小
- RSS / PSS 等运行时占用
- 进程整体内存状态是否和文件体积分析一致
5. 参考链接
https://blog.csdn.net/weiwei9363/article/details/121475302
FEATURED TAGS
Git
Cheat Sheet
Markdown
Tools
C++
Linker
Thread
Linux
TCP
Network
GDB
Debug
leetcode
链表
WSL
Ubuntu
Windows
Linux Kernel
GCC
Android
adb
Troubleshooting
Profiling
Sanitizer
glibc
MySQL
Database
Python
curl
Build
ELF
clang-format
CMake
Graphviz
Performance
vcpkg
Protobuf
排查
速查
内存
STL
调试
性能分析
性能
读书笔记
方法论
架构
网络
Timer
mbedTLS
TLS
安全
负载均衡
脚本
工具
LRU
二叉树
BST
中序遍历
回溯
二分查找
优先队列
排序
旋转数组
jenkins
部署