很久之前接触过一个灰盒的漏洞检测工具,当时跟工具的开发者讨论了一些工具未解决的一些痛点,op 印象比较深的是其中一个点,这个工具的漏洞检测算法会参考调用栈信息,因此存储了海量的stack trace数据,因为一些业务上的因素,这些数据需要能够存储一段时间才能删除,比如存储够一个月,那这累积下来存储空间的占用就是一个比较头疼的问题,比如 Java 的调用栈可能的一个数据样例:
java.lang.RuntimeException: level 2 exception
at com.msh.demo.exceptionStack.Test.fun2(Test.java:17)
at com.msh.demo.exceptionStack.Test.main(Test.java:24)
at sun.reflect.NativeMethodAccessorIm 猴子 pl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.io.IOException: level 1 exception
at com.msh.demo.exceptionStack.Test.fun1(Test.java:10)
at com.msh.demo.exceptionStack.Test.fun2(Test.java:15)
... 6 more
二、思路
笔者之前看过美剧《硅谷》之后就对压缩算法领域很是感兴趣,也研究过一些压缩算法的实现,之前自己也针对性的设计过几款压缩算法整体压缩率还是很高的,于是就想着看看能不能解决这个问题,开始思考如何针对此类数据的特性针对性设计压缩算法:
[ol]
首先是拆解调用栈,大概可以分为几部分:
每个栈帧又可以拆解为几部分:
字符串常量池字典
栈级别避免重复
[/ol]
三、交换 idea
以上仅为个人的头脑风暴,还未编码验证,发到 v2 里与老哥们讨论一下,欢迎老哥们发表看法互相讨论。
最后,贴上一个美剧《硅谷》中我比较喜欢的一帧截图: