web监控的统一?

现在我在我的web应用中监控了几张表,都是用Ext.Ajax.request提交一个action定时轮询数据库,现在是随着要监控的表增加,action数量增加,每个都是几秒轮询一下,这样会给服务端增加很大的负担,也不好管理,这种情况下有好的解决方案吗?
[b]问题补充:[/b]
to huangnetian:我这是个小东西,就是一个简单的管理界面,用不到缓存、负载均衡这些东西,现在都做的差不多了,dwr估计也用不了,还有啥好办法吗?
[b]问题补充:[/b]
to huangnetian:就是用了dwr还不是一样要每个都是几秒轮询一下,没啥区别呀,服务端一样有呀压力
[b]问题补充:[/b]
to 王者之剑:性能可能不是问题,还有个问题是我这个监控是要报警的,触发报警条件就弹出报警窗口,如果要监控三个表就要跳出三个报警窗也不太方面
[b]问题补充:[/b]
to 王者之剑:你讲的有道理,在一个action返回三个表的监控信息
[b]问题补充:[/b]
to huangnetian:我这个web是部署在unix环境下的,用unix下C编程我不是很熟,是不要用c写个后台进程,用java调那
[b]问题补充:[/b]
to huangnetian:这个java线程数据如何和页面交互那,如何启动这个线程那
[b]问题补充:[/b]
to huangnetian:你举个例子看看如何把java的结果放在request对象里,request是jsp的对象java里是没有的
[b]问题补充:[/b]
to huangnetian:那这个线程发在那里那action里?,如何调用action启动线程那?你考虑过吗?
[b]问题补充:[/b]
to huangnetian:我没有用到spring有啥方法吗

在servlet里的init方法,也行

你有两个地方不合理:
1.如果查库频繁,建议用缓存,这样就省去了每次查库的效率
2.如果不停的访问action会加大服务器的负载,建议用dwr.这样可以直接访问接口,省去了服务端的负载了,或都你只有做集群,搞负载均衡了

那缓存可以不要,但是你那种实现方法不是有问题的,有些病毒就是用的这个原理.写个程序不断的访问某个网站,不断的提交,这样就占用了很多访问资源.所以你一定要用dwr,调接口,不能直接调用action,这样太可怕了.

一个是访问接口,一个是http访问,能相齐并论吗

再说走http协议,肯定没有直接访问接口来的快呀,http里包括域名解析,还有就是每访问一个action,就会创建一个对象.而接口一般都是单例的,不会重复创建对象,你想想效率和资源根本不是一个等级

虽然java有垃圾回收机制,好像没什么关系的,但是java的回收不是很急时的,所以有时候你会发现内存溢出.

希望我的一些经验能对你有所帮助

你完全可以使用DWR的服务器推技术(Server Push)
这篇是我的博客关于DWR推技术的一个简单示例
[url]http://yourgame.iteye.com/blog/199079[/url]

现在Extjs3.0已经出来了.他里面就有一个Server Push相关的组件,你也可以了解一下!
这种意志轮询的方式是效率最低下的!严重不支持你这么弄!!!

几秒查一次没什么问题吧,如果是一个小东西的话

我觉得监控搞一个action就可以了吧,为什么要一个表搞一个呢。

这样做还是不能减少对action的访问次数,其实你可以这样呀,后台启个线程去轮询数据库,把查询的结果放到request里,而页面上直接从request里取不就行了吗,这样就不用时时的去访问action了

是阿,别说3个表了,30个表都没有问题。然后一个提示窗口也好做

不是呀,你用java写个线程呀,怎么会C有关呢,跟你的项目代码一起呀.

我有一个例子,你看看

/**

  • Title: AutoSettleThread.java
  • Copyright: Incesoft Co., Ltd. All Rights Reserved.
  • Company: Incesoft Co., Ltd.
    */ package com.incesoft.community.thread;

import org.apache.log4j.Logger;

import com.incesoft.community.service.CommunityVisitorService;

/**

  • 定期刷新访客线程

  • @author winner
  • @Created 2009-3-6 下午03:02:54
    */
    public class VisitorThread extends Thread {
    private static final Logger logger = Logger.getLogger(VisitorThread.class.getName());
    private CommunityVisitorService visitorService;

    public void run() {

    while (true) {
        try {
            sleep(1000 * 60*10);  //10分钟,执行一次
    
            try {
                logger.debug("进入刷新访客表");                   
                visitorService.flush();
                logger.debug("刷新访客表");
            } catch (Exception e) {
                e.printStackTrace();
            }            
    
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }// 挂起1小时
    
    }
    

    }

    public final static void main(String[] a){

    }

    public CommunityVisitorService getVisitorService() {
    return visitorService;
    }

    public void setVisitorService(CommunityVisitorService visitorService) {
    this.visitorService = visitorService;
    }

    }

我写的这么辛苦,别忘了给我分呀

java 线程不用与页面交互,线程把处理后的结果,放到request里,页面从request里取,这就是交互

HttpServletRequest request;
action 里有的呀

晕,线程,放在service里,tomcat一起动时会加调用的,
不过你要在spring里配置一下,

<bean class="com.incesoft.community.thread.VisitorThread" init-method="start">
        <property name="visitorService" ref="visitorService"/>
</bean>