我想用 Java 编写一个“智能监视器”,它会在检测到即将出现的性能问题时发出警报。我的 Java 应用程序正在将结构化格式的数据写入日志文件:
<datetime> | <java-method> | <seconds-to-execute>
因此,例如,如果我有一个Widget#doSomething(String)
执行时间为 812 毫秒的方法,它将被记录为:
2013-03-24 11:39:21 | Widget#doSomething(String) | 812
随着性能开始下降(例如在主要收集期间、峰值负载期间或系统只是缓慢爬行),方法执行时间开始减慢;所以最右边的列开始看到巨大的数字(有时 20 - 40 秒来执行一个方法)。
在大学里——为了一个机器学习练习——我写了我的教授所说的线性二分法,它采用简单的测试数据(一个人的身高、体重和性别),并“学习”了如何根据他们将一个人分类为男性或女性身高体重。然后,一旦它拥有了所有的训练数据,我们就给它提供了新的数据,看看它可以多准确地确定性别。
我认为线性二分法的多元版本称为支持向量机(SVM)。如果我错了,请澄清一下,我会将问题的标题更改为更合适的名称。无论如何,我需要这个应用程序来做以下事情:
- 在“测试模式”下运行,我从我的主 Java 应用程序(我希望监控的应用程序)向它提供结构化日志文件,它获取每个日志条目(如上所示)并将其用于测试数据
- 只有
java-method
和seconds-to-execute
列作为输入/测试数据很重要;我不在乎日期时间
- 只有
- 在“监控模式”下运行,它会主动从日志文件中读取新的日志数据,并使用类似的“机器学习”技术来确定是否即将出现性能下降
重要的是要注意,该seconds-to-execute
列并不是这里唯一重要的因素,因为我已经看到某些方法在性能出色的时期非常糟糕,而在服务器似乎快要死机的时候,其他方法的时机非常好并推雏菊。因此,显然某些方法比其他方法“加权”/对性能更重要。
我的问题
- 谷歌搜索“线性二分法”或“支持向量机”会发现一些非常可怕的、高度学术的、超大脑的白皮书,我只是没有精力(也没有时间)去消耗——除非它们真的是我唯一的选项; 所以我问是否有外行对这些东西的介绍,或者有一个很棒的网站/文章/教程来用 Java 构建这样的系统?
- 是否有任何可靠/稳定的开源 Java 库?我只能找到
jlibsvm
,svmlearn
但前者看起来处于纯 beta 状态,而后者似乎只支持二元决策(比如我的旧线性二分法器)。我知道有Mahout,但它位于 Hadoop 之上,我认为我没有足够的数据来保证建立自己的 Hadoop 集群的时间和精力。
提前致谢!