需求
机器 40核,内存125g,磁盘200g
mysql审计日志 每天静态产生1.6亿条数据,对这些数据进行解析。转换成不重复的sql,汇总到一个文件里面
核心技术点
25g =1.6亿
拆成 25个1个的 1g=800万条数据
对于cpu方面
用多python多进程(25个进程) 把cpu打满,性能用到极限。
对于内存方面
用 mmap (一种内存映射文件的方法) 相当于0拷贝 基本内存没有消耗,消耗比较小
如果用 循环放进list里面 1个1g文件会消耗 2500mb 内存 内存一定会爆,所以采用取一行处理的一行方式
25个1个文件 就对应 25个产生的文件
每读一行 再写入 用追加的方式写入文件
最后用linux把这25个文件汇总
cat 1.sql 2.sql > all.sql
再去重
sort all.sql | uniq > uniq.sql
测试结果 线性增加
2个进程 2分钟
3个进程 2.1分钟
。。。
25个进程 7分钟
主要用 top 在按 1 查看所有cpu的状态,还是内存状态
free -m 查看内存状态
iostat 查看io状态
这次不涉及到 跨网络io 不用查看,可以用warefire查看
执行中 进程使用内存超过linux空闲内存,linux会自动把这个进程killed 会打印出来
所以得注意主要注意cpu,内存的大小
磁盘 df -h 最好 不要超过70% 要不然影响性能