论坛首页 Java企业应用论坛

公司要求实时监控服务器,写个Web的监控系统

浏览 35288 次
精华帖 (0) :: 良好帖 (7) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2008-08-19  
wzpwork 写道
不错,学习了.其实像这个应用,不用AJAX也可以,直接用XMLHTTP.

你现在用的Ajax其实就是个拉模型技术 需要的时候不停的去取信息 相反你也可以采用推模型的技术 通过模拟Http协议 不停的像客户端发送信息 这样实时性是非常高的
0 请登录后投票
   发表时间:2008-08-19  
偶就是用退的
JMS推到监控服务器
服务器用bds推到页面flex
全程无刷新
动态实时
0 请登录后投票
   发表时间:2008-08-19  
楼上的朋友建议很好,但是不符合我这个系统吧,如果用push(服务器驱动客户端),
像我做的cpu,内存等系统信息不好做成服务端的事件驱动吧,总不能每内存, cpu有改变就推
一次客户端,只能用轮询的方法吧
0 请登录后投票
   发表时间:2008-08-19  
kakaluyi 写道
楼上的朋友建议很好,但是不符合我这个系统吧,如果用push(服务器驱动客户端),
像我做的cpu,内存等系统信息不好做成服务端的事件驱动吧,总不能每内存, cpu有改变就推
一次客户端,只能用轮询的方法吧

你说的轮询是指服务器端的,是监控数据的实现。
他们说的推指客户端的,指浏览器取数据的方式,不一样的。
0 请登录后投票
   发表时间:2008-08-19  
xieke 写道
kakaluyi 写道
楼上的朋友建议很好,但是不符合我这个系统吧,如果用push(服务器驱动客户端),
像我做的cpu,内存等系统信息不好做成服务端的事件驱动吧,总不能每内存, cpu有改变就推
一次客户端,只能用轮询的方法吧

你说的轮询是指服务器端的,是监控数据的实现。
他们说的推指客户端的,指浏览器取数据的方式,不一样的。


不不,我的轮询是客户端(浏览器)发送请求轮询服务器的系统信息,当然项目要做的是一个会议系统就是一个推比如有用户进入会议,则要通知浏览器有用户进入,这样就要用到长连接,要servlet和客户端一直挂住,这就是我理解的推,由事件驱动,如果由客户端一直查询servlet是否有用户加入会议,则用到了轮询,这个实时性都非常不好,性能也损失很大,正在优化,每个用户进入会议想把从轮询过度到,服务端通知浏览器。而这个实时监控我觉得用浏览器轮询服务器会比较好,因为系统信息不好事件驱动
0 请登录后投票
   发表时间:2008-08-20  
ajax可以考虑使用DWR简单,方便
0 请登录后投票
   发表时间:2008-08-20  
给良好了。这是非常有热情的帖子阿。JavaEye应该也鼓励这种展示自己的精神的。这类东西我以前也做过。原理类似。不过给你几个小建议:

不要用静态类(方法)来完成采集。用下面的方式:

定义一个接口
Interface SysInfoFetcher {
    public CpuInfo fetchCpuInfo();
    public MemInfo fetchMemInfo();
    public DiskInfo fetchDIskInfo();
}

然后把你自己写的代码重构成下面的东东:
class LinuxSysInfoFetcher implements SysInfoFetcher {
    //TODO 实现相应的方法
}

这样的好处在于:
1、你的前端应用代码可以面向SysInfoFetcher接口来编写,不依赖具体的实现;
2、你现在可以在现在的项目中注入LinuxSysInfoFetcher实现,今后如果有精力或者有能力了,还可以写若干个WinxpSysInfoFetcher或者SolarisSysInfoFetcher。你的代码生命就延长了扩展了。
3、也许有一天你觉得你掌握JNI了,于是你可以用JNI重构LinuxSysInfoFetcher,而不影响接口和前段应用。甚至你可以直接写个新的LinuxISysInfoFetcherJniImpl实现类。

到了那一天,你就可以把包直接放到sf.net上了。
0 请登录后投票
   发表时间:2008-08-20  
我们使用snmphibernate, cpu, memory信息都可以取到了,jboss就用jmx,然后一个timetask去轮询访问各个点。
0 请登录后投票
   发表时间:2008-08-20  
neora 写道
给良好了。这是非常有热情的帖子阿。JavaEye应该也鼓励这种展示自己的精神的。这类东西我以前也做过。原理类似。不过给你几个小建议:

不要用静态类(方法)来完成采集。用下面的方式:

定义一个接口
Interface SysInfoFetcher {
    public CpuInfo fetchCpuInfo();
    public MemInfo fetchMemInfo();
    public DiskInfo fetchDIskInfo();
}

然后把你自己写的代码重构成下面的东东:
class LinuxSysInfoFetcher implements SysInfoFetcher {
    //TODO 实现相应的方法
}

这样的好处在于:
1、你的前端应用代码可以面向SysInfoFetcher接口来编写,不依赖具体的实现;
2、你现在可以在现在的项目中注入LinuxSysInfoFetcher实现,今后如果有精力或者有能力了,还可以写若干个WinxpSysInfoFetcher或者SolarisSysInfoFetcher。你的代码生命就延长了扩展了。
3、也许有一天你觉得你掌握JNI了,于是你可以用JNI重构LinuxSysInfoFetcher,而不影响接口和前段应用。甚至你可以直接写个新的LinuxISysInfoFetcherJniImpl实现类。

到了那一天,你就可以把包直接放到sf.net上了。

  接口的建议非常好,以前写代码没有想过设计模式,都是想到用什么就写什么,没有设计可能是菜鸟的必经阶段吧,一语惊醒梦中人啊,确实用接口来重构这样非常方便扩展,已经在项目中接入接口了,必要的时候还准备用snmp4j来扩展监控更多的功能。
看了后真的很振奋,被投了良好贴啊(虽然是精神鼓励成分比较大),以后一定会继续把原创的体验放到javaeye上让大家拍砖,虽然很多技术没有创新,也没什么特别好的架构和选型,但新人真的很需要这种鼓励,这里多谢neora的建议和鼓励(写了那么多),和对菜鸟的关怀 
0 请登录后投票
   发表时间:2008-08-20  
有现成的开源的Ganglia,很好用,我们公司就用他

http://wiki.huihoo.com/index.php?title=Ganglia
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics