做JAVA开发5年了,一直从事的应用系统开发,基本上用SSH做应用系统的主要开发架构,做系统到是轻车熟路,游刃有余。但就最近做了一个网站,“大姑娘上轿头一回”,不知道采用什么方式去做(主要是前台页面数据显示的问题),而且网站也很简单,只需要做页面,然后把数据显示出来就行,因为要和应用系统嵌在一起,所以后台的开发都不存在什么问题,几天光景就给全部完成,关于前台数据显示我想Action去做,肯定不行,操作起来不是很方便,也不合理,后来我就采用JQuery+AJAX做的,网站到是做完了,自己测试一切OK,但是后来投入试运行,问题来了,人访问的多了,页面就一直处于打开等待状态,最后数据不显示,后来我在本机测试,我不停的刷新和打开页面,到一定次数,也出现同样地情况,出现这种情况我只有把我的tomcat重新启动,然后页面显示才正常。
例如我的首页(default.jsp)
要查询首页栏目(数据表:WWW_FANCE),系统公告(数据表:WWW_AFFICHE),文章(数据表:WWW_ARTICLE)....等等,总之这个首页查询的数据特别的多,如下:
<script type="text/javascript">
var dep = "40288a3925da98f90125daa35aa6000e";
$(document).ready(function(){
queryAffiche(dep);
disSysTime();
queryNewSlidesPic(dep, 4, "n");
queryWorkTask(dep, 8);
queryArticle("40288a3c3146af43013146e51b64000c", 10, "news ul", 19);
queryArticle("40288a3c3146af43013146e57aca000d", 10, "f2-1 ul", 19);
queryArticle("40288a3c326c3f9001326c7fe0e20006", 10, "f2-2 ul", 26);
queryArticle("40288a3c334868de01334ab1ec6a000e", 10, "f2-3 ul", 19);
querySafetyDays(dep);
queryMetting(dep, '0');
setLeftPosition();
queryLatestPhotoAlbum(dep, 6);
queryNavFance(dep);
queryPersonInfo();
});
</script>我不知道是不是我这样一种方式去做是不是不可行的,,或者我出现这样的情况到底是什么原因引起的,希望JAVA搞网站开发的老大们指点一下,后来请教了一个朋友,说用DWR去做,,我现在的思路不是特别清楚,希望能指点指点,谢谢。
例如我的首页(default.jsp)
要查询首页栏目(数据表:WWW_FANCE),系统公告(数据表:WWW_AFFICHE),文章(数据表:WWW_ARTICLE)....等等,总之这个首页查询的数据特别的多,如下:
<script type="text/javascript">
var dep = "40288a3925da98f90125daa35aa6000e";
$(document).ready(function(){
queryAffiche(dep);
disSysTime();
queryNewSlidesPic(dep, 4, "n");
queryWorkTask(dep, 8);
queryArticle("40288a3c3146af43013146e51b64000c", 10, "news ul", 19);
queryArticle("40288a3c3146af43013146e57aca000d", 10, "f2-1 ul", 19);
queryArticle("40288a3c326c3f9001326c7fe0e20006", 10, "f2-2 ul", 26);
queryArticle("40288a3c334868de01334ab1ec6a000e", 10, "f2-3 ul", 19);
querySafetyDays(dep);
queryMetting(dep, '0');
setLeftPosition();
queryLatestPhotoAlbum(dep, 6);
queryNavFance(dep);
queryPersonInfo();
});
</script>我不知道是不是我这样一种方式去做是不是不可行的,,或者我出现这样的情况到底是什么原因引起的,希望JAVA搞网站开发的老大们指点一下,后来请教了一个朋友,说用DWR去做,,我现在的思路不是特别清楚,希望能指点指点,谢谢。
解决方案 »
- 关于Hibernate中update()的问题(在线等!)谢谢大家
- 急急~~eclipse安装出现问题,JDK、环境变量都设置好了还是不行.请大虾帮忙解决下!!!!
- 购物车的问题
- 为什么在<html:form>中的action中不能包含有‘<%=%>’呢?????????????
- 请问如何构造成 HttpServletRequest?
- 这个面试题目,我不知道该怎么回答,只有求教各位朋友了
- 在struts2.0中如何使用eWebeditor
- 请高手帮忙:如何跟踪访问WEB应用的用户
- long 型怎样转换成字符型的
- Boolean haserror = false;
- 求解,在jsp页面上生成一个树形表格,有图为例
- 单点登录
应该在你tomcat的log里头会看到报错的,我记得。
网站访问量大,框架越简单越好,你非用最笨重的ssh。
一个页面上十几个查询,再加上用户身份什么的,一个人开二十几个数据库会话,游标估计都快到上限了=================
首页没可能全部显示吧?都是前多少条然后给个“更多”链接吧?
数据库,把所有首页需要的数据变成物化视图。后台,首页需要的所有查询写到一个方法里,防止每个调用都产生一个action代理,如果你struct2玩明白了就不用管这条。前台,只有“用户读取之后做出动作才发生变化的”用ajax,其它的老老实实走跳转。服务器,找个明白tomcat的人好好设置下参数。
我查看我的log日志,没有异常日志。
我的就是写一个action,然后用ajax调用。
解决办法增加服务器的线程数,当然线程数是和服务器的CPU数量有关系不能随便加(我的是4个CPU,线程数定为120),同时300多人访问并操作还是够用。
要是这样,那我这个方案是不可行了,,因为服务器这个东西固定了,不可能换。。而且还是以前的老式IBM的立式服务器。。
==============================================
你以为你会做系统开发,直接就能上手做网站啊,现在的网站程序比你们的所谓系统开发复杂多了
首页数据必须缓存起来,后台数据没修改时候才去刷新缓存。
资讯类需要静态化,cdn加速。 实时信息类网站需要查询数据库,要求信息及时可靠,如证券信息,这个需要用到一些推技术后者socket技术实现。交互类网站(大型社区)这个架构最复杂。主从数据库,数据缓存,分流。
根据楼主的问题,可以获取的信息不是很多,初步估计是请求有阻塞。具体问题具体分析看是http阻塞还是数据库阻塞。
数据源配置文件:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:XE</value>
</property>
<property name="username">
<value>spms</value>
</property>
<property name="password">
<value>spms</value>
</property>
</bean>
我也乱讲几句首先要确保的有:
1.数据库连接一定要释放,当你访问人多了卡住时,去检查一下oracle的连接是不是没有释放.
查询所有会话
select sid,logon_time,username,machine from v$session;
按用户/主机统计
select username,machine,count(*) from v$session group by username,machine;
我觉得,应该是刷新多少次,就有多少个请求,服务器程序是不知道的,连接是被客户端抛弃的,只有服务器向客户端扔数据时才会发再,但服务器肯定已经准备了数据.所以应该执行的都执行了.2.做网站主要是发布信息,25楼说得有道理,像首页这种访问量大,更新频率高的页面,最好做在内存里,用一套机制实现更新到磁盘(数据库)时,同时更新到内存.
我觉得,html是最好的方式.3.最重要的,楼主应该找到底慢在哪里, 是数据库,还是tomcat(容器),或者是网络,或者是客户端的解析.
楼主还可以跟踪内存变化来确定原因,比如你把数据库,应用,客户端都分开来部署(不同的物理机器),监测内存.4.用那个dwr的话,也不见得能解决问题,我用过别人一个dwr的应用系统,也不见得好快.5.实在不行,servlet吧,也挺好的.
set CATALINA_OPTS="-Xms30m -Xmx512m"
检查一下在每Catalina.bat文件,个“%_RUNJAVA%”后面都应该有“%CATALINA_OPTS%”
有的Catalina.bat文件在“%_RUNJAVA%”后面跟着“%JAVA_OPTS%”,
如果是这样,应该设置:
set JAVA_OPTS=-Xms30m -Xmx512m
或者在每个“%_RUNJAVA%”后面加上“%CATALINA_OPTS%”
我最近也做了个ssh的网站 不过没有遇到这样的问题~
只有重启tomcat才好用,要是这种情况可以看看spring的配置方式,我用的注释型事务。
而且dwr 也可以用spring的依赖注入模式,说的不对见谅
这种问题的原因很多,你懂的。
但你的数据库连接肯定是不够的。
BasicDataSource源码不知道你看过没有。 protected int maxActive = 8;//最大连接数
protected int maxIdle = 8;//最大空闲连接
protected int minIdle = 0;//最小空闲连接
protected int initialSize = 0;//初始化连接
//......等等等上面这些都是BasicDataSource基本设置,都看得懂的。
所以,根据自己情况,在<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"></bean>
中适当修改一些设置是有必要的。 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value="" />
<property name="initialSize" value=""/>
<property name="maxIdle" value=""/>
<property name="minIdle" value=""/>
<property name="maxActive" value=""/>
<property name="logAbandoned" value="true/false"/>
<property name="removeAbandoned" value="true/false"/>
<property name="removeAbandonedTimeout" value=""/>
<property name="maxWait" value=""/><!-- 毫秒为单位 -->
<!-- ......等等等 -->
</bean>具体值要根据你网站的压力测试情况而定。
慢慢调试吧。还有,听说一个页面调用Ajax的次数不要太多,因为这样会造成一个客户端打开一个页面相当于同时打开多个页面的请求量。访问量一多,这是呈数量级增长的。所以最好能一次ajax出来的就一次性查询出来。多看看网站性能调优方面的资料。
当然我也是个外行,希望对你有一点点的帮助。
这位兄弟,其实我也不想用ajax,,一个首页肯定是查询很多表的数据,,用action去做确实比较麻烦。。
第一个请求完了,等100毫秒再去请求下一个!
setTimeOut('fun',100);
服务器压力大大减少!
比如电脑CPU持续高涨,你只有结束占用内存大的程序,但不是长久之计,优化还是关键。
具体方法还是等大牛出现!
其次,可以考虑多个tomcat做个简单的负载均衡。
网站类系统,页面静态化是必须的。
哥们 我的理解是 生成静态页只是给详细页生成的 列表页没办法纯静态(数据经常变,只能用伪静态,没必要检测一下数据有没有更新,如果有又重新生成页面...)至于你出现的问题 建议你检查一下SQL部分 看看是不是SQL查询引起了数据库线程死锁 最终造成程序池满了 导致了问题的出现希望能帮到你!
虽然基础原理大家都明白,但是不一定对最新的技术熟悉,对自己工作范围外的技术学习。
java也是一个用途很广的语言,
不会做网站也无可厚非啊。就好象我们部门一直是做服务器开发的,重来不用数据库,对数据库不熟悉又有什么错。
那么多知识,那么多技巧,吾生也有涯,而知无涯。
能精通一门就很不错了。
1、首页尽量做成静态的,其他页做不做还好。从你的描述来讲,貌似也就首页压力会很大。
2、你说程序用了SSH,那个Hibernate要做优化的。像上面那位兄弟说的,可以启用二级缓存。另外对于前台来讲,可能有一些数据查询挺麻烦的,建议你查这些数据时候可以直接用Spring的JdbcTemplate,而不是直接用Hibernate的查询。
3、加大连接池的最大连接数。建议不要增加JVM的内存。
4、连接池可以换成proxool试试。我以前做的项目遇到过使用dbcp和c3p0无法自动关闭连接的情况。另外proxool提供了监视功能,你可以查看是否有长时间的连接被占用。我本来还想写5来着,但是忘了…… 真纠结求指正,勿喷
---------------------
http://www.mowker.com/view/
var dep = "40288a3925da98f90125daa35aa6000e";
$(document).ready(function(){
queryAffiche(dep);
disSysTime();
queryNewSlidesPic(dep, 4, "n");
queryWorkTask(dep, 8);
queryArticle("40288a3c3146af43013146e51b64000c", 10, "news ul", 19);
queryArticle("40288a3c3146af43013146e57aca000d", 10, "f2-1 ul", 19);
queryArticle("40288a3c326c3f9001326c7fe0e20006", 10, "f2-2 ul", 26);
queryArticle("40288a3c334868de01334ab1ec6a000e", 10, "f2-3 ul", 19);
querySafetyDays(dep);
queryMetting(dep, '0');
setLeftPosition();
queryLatestPhotoAlbum(dep, 6);
queryNavFance(dep);
queryPersonInfo();
});
</script>楼主,你这每个query是不是就用ajax访问后一次啊,干嘛分这么多次啊,能不能合到一个请求里面啊,你这来来回回要交互多少次啊,这也是性能资源浪费啊
2:使用 CDN 技术进行提速
3:压缩 CSS 和 JS 文件内容
4:Web 页面尽可能地减少 HTTP 请求数,比如使用 Yahoo! 提出的 Combo Handler,这个可以将多个 js、css 文件合并成为一个 HTTP 请求,比如这样:http://static.xxx.com/combo-handler?js=jquery-min.js,load/load-min.js,cart/cart-min.js&t=20111224.js这样的话,可以把三个 js 文件合并成为一个 HTTP 请求,响应回来的数据就是这三个文件的内容。5:对于页面上的处理可以去下载 YSlow、PageSpeed 等 Firefox 插件,他们会告诉你该怎么做。互联网应用的开发远比应用系统开发复杂数倍,光是访问量就不是应用系统能够比拟的。应用系统的使用者及受众限于部分人群,因此 Web 安全方面的东西可以忽略,但是互联网应用就不可以了!
JAVA做网站我都麻木了, 难道真的是不适合
透露一下吧,俺想了解一下行情,呵呵
我是搞PHP开发的
以前遇到过类似的问题
后来检查发现问题出在AJAX请求堆积上
即:通过AJAX发起的一个请求,当因为某种问题服务器响应缓慢时,一个请求还没走完,另外一个请求又发起了(是指同一个客户端,比如轮询),造成两个请求都卡在那里...这样,越积越多,服务器越是响应不过来,最后,APACHE内存溢出,崩溃掉(windows server系统)。而LINUX系统上虽然不会崩溃,但是也是卡在那里。解决方法就是在轮询的时候,先检测上次请求是否完成,如果不完成,则一直等待。