26 | 案例篇:如何找出狂打日志的“内鬼”?
- 为了优化文件访问的性能,采用页缓存、索引节点缓存、目录项缓存等多种缓存机制,减少对下层块设备的直接调用。
- 同样的,为了优化块设备的访问效率,使用缓冲区来缓存块设备的数据。
案例准备
- 机器配置:2 CPU,8GB 内存
- 预先安装 docker、sysstat 等工具,如 apt install docker.io sysstat
案例分析
docker run -v /tmp:/tmp --name=app -itd feisky/logapp
ps -ef | grep /app.py
root 18940 18921 73 14:41 pts/0 00:00:02 python /app.py
# 按 1 切换到每个 CPU 的使用情况 top
top - 14:43:43 up 1 day, 1:39, 2 users, load average: 2.48, 1.09, 0.63
Tasks: 130 total, 2 running, 74 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.7 us, 6.0 sy, 0.0 ni, 0.7 id, 92.7 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.3 sy, 0.0 ni, 92.3 id, 7.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8169308 total, 747684 free, 741336 used, 6680288 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7113124 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18940 root 20 0 656108 355740 5236 R 6.3 4.4 0:12.56 python
1312 root 20 0 236532 24116 9648 S 0.3 0.3 9:29.80 python3
iostat
# -d 表示显示 I/O 性能指标,-x 表示显示扩展统计(即所有 I/O 指标) iostat -x -d 1
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 64.00 0.00 32768.00 0.00 0.00 0.00 0.00 0.00 7270.44 1102.18 0.00 512.00 15.50 99.20
pidstat -d 1 15:08:35 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
15:08:36 0 18940 0.00 45816.00 0.00 96 python 15:08:36 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
15:08:37 0 354 0.00 0.00 0.00 350 jbd2/sda1-8
15:08:37 0 18940 0.00 46000.00 0.00 96 python
15:08:37 0 20065 0.00 0.00 0.00 1503 kworker/u4:2
strace
strace -p 18940
strace: Process 18940 attached
...
mmap(NULL, 314576896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0f7aee9000
mmap(NULL, 314576896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0f682e8000
write(3, "2018-12-05 15:23:01,709 - __main"..., 314572844
) = 314572844
munmap(0x7f0f682e8000, 314576896) = 0
write(3, "\n", 1) = 1
munmap(0x7f0f7aee9000, 314576896) = 0
close(3) = 0
stat("/tmp/logtest.txt.1", {st_mode=S_IFREG|0644, st_size=943718535, ...}) = 0
lsof
lsof -p 18940
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 18940 root cwd DIR 0,50 4096 1549389 /
python 18940 root rtd DIR 0,50 4096 1549389 /
…
python 18940 root 2u CHR 136,0 0t0 3 /dev/pts/0
python 18940 root 3w REG 8,1 117944320 303 /tmp/logtest.txt
# 拷贝案例应用源代码到当前目录docker cp app:/app.py . # 查看案例应用的源代码cat app.py logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
rHandler = RotatingFileHandler("/tmp/logtest.txt", maxBytes=1024 * 1024 * 1024, backupCount=1)
rHandler.setLevel(logging.INFO) def write_log(size): '''Write logs to file''' message = get_message(size) while True: logger.info(message) time.sleep(0.1) if __name__ == '__main__': msg_size = 300 * 1024 * 1024 write_log(msg_size)
def set_logging_info(signal_num, frame): '''Set loging level to INFO when receives SIGUSR1''' logger.setLevel(logging.INFO) def set_logging_warning(signal_num, frame): '''Set loging level to WARNING when receives SIGUSR2''' logger.setLevel(logging.WARNING) signal.signal(signal.SIGUSR1, set_logging_info)
signal.signal(signal.SIGUSR2, set_logging_warning)
kill -SIGUSR2 18940
top
...
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st iostat -d -x 1
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
docker rm -f app
小结
26 | 案例篇:如何找出狂打日志的“内鬼”?相关推荐
- ArcGIS案例学习笔记-找出最近距离的垂线
ArcGIS案例学习笔记-找出最近距离的垂线 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于任意矢量要素类,查找最近距离并做图 数据: 方法: 0. 计算 ...
- 查找txt中的中文字符_找出nginx请求日志中某个url请求总次数排名前十的ip地址...
答案如下: # 利用linux自带命令:sort.awk.grep.head.uniq组合得出相应的答案 awk '{print $1}' | grep 'www.xxxx.com' access.l ...
- 一招教你玩转SQL:通过找出数据的共同属性实现SQL需求
关注我们,下载更多资源 预告:12月22日,ACOUG 联合创始人及多位核心专家将欢聚一堂,为"关键词解析2018技术圈的那些事儿"为主题的分享讨论,欢迎大家踊跃报名参会. 点击& ...
- python将大于输出列表_python找出列表中大于某个阈值的数据段示例
该算法实现对列表中大于某个阈值(比如level=5)的连续数据段的提取,具体效果如下: 找出list里面大于5的连续数据段: list = [1,2,3,4,2,3,4,5,6,7,4,6,7,8,5 ...
- 给一个长度为n的字符串,找出长度为m的最小字典子序列【单调栈】
一个大大的分割线,如果这个傻逼题没有被作为某某复赛的签到题,可能我一会都一直傻逼下去了. [2019计蒜之道复赛--星云系统] 题目是,给出一个长度为n(1<n<5e6)的只有小写字母的字 ...
- 【linux性能优化】定位分析狂打日志的问题
一.文件系统和磁盘I/O 回顾一下文件系统和磁盘I/O的原理 1.1 文件系统 对存储设备上的文件进行组织管理的一种机制 为了支持各类不同的文件系统,Linux在各种文件系统上抽象了一层虚拟文件系统V ...
- 一篇英文文档中找出频数最多的10个单词
"""一篇英文文档中找出频数最多的10个单词collections: Counter 提供计数器工具以支持方便和快速的计数 most_common(n) 返回n个最常见元 ...
- MUI组件:弹出层组件 - 案例篇
MUI组件:弹出层组件 - 案例篇 官方组件 · 演示地址:http://dcloud.io/hellomui/examples/actionsheet.html 动画演示 · 效果图:(按" ...
- 有26个字母a~z,找出所有字母组合,a、b、c、ab、abc、a~z 都是一个组合(顺序无关)
有26个字母a-z,找出所有字母组合,a.b.c.ab.abc.a~z 都是一个组合(顺序无关) import java.util.HashSet;public class Test05_3 {pub ...
最新文章
- MATLAB实现图像镜像变换的源代码
- Java 洛谷 P1008 三连击
- 《CSS蝉意花园读书精记》(基础篇---------上.资料篇1)
- 机器学习实战_09_树回归_源代码错误修正
- linux+守护进程+php,【转载】Linux 守护进程的编程方法
- Supervisor管理hhvm进程
- js 变量的声明能提升 初始化不会提升
- 大学计算机老师说未来不需要程序员,都是机器自动生成代码。老师说估计20年,程序员就会被取代,现实吗?
- Ubuntu 右键打开终端
- 鲸鱼优化算法_鲸鱼优化算法:一种群体智能最优化方法
- iOS http文件下载
- 为Ubuntu安装中文语言包
- android系统解压zip文件,Android解压缩zip文件
- 微信小游戏代码包侵权的一种解决方案
- 一个最全产品开发流程
- 人口红利提前消失?今年经济会如何?权威回应来了
- 英文网页批量翻译导出本地教程
- 微星显卡拷机测试软件,微星显卡拷机软件(MSI Kombustor)
- sarscape5.6.2 结果在arcgis中制图(2可以在envi里调好色带导入arcgis)
- 城市消费券,拒绝恶意爬取
热门文章
- echarts词云图形状_用Python 3.8绘制词云图就这么20行代码
- a commit git 参数是什么意思_深入理解Git - 一切皆commit
- 层和 native_React-Native与小程序的底层框架比较
- qt 加载 图片旋转_QT 实现图片旋转的两种方法
- python 模糊匹配文件名 glob_Python: glob匹配文件
- mysql下载备份数据库命令行,如何从MariaDB数据库备份和还原命令行
- 怎么设置电脑屏幕一直亮着_电脑屏幕出现条纹是什么原因 花屏怎么解决?
- Hive DML操作
- win10 笔记本猎豹WiFi无法打开
- 一行代码搞定Python逐行内存消耗分析