锁定老帖子 主题:请教大型WEB系统的架构设计和技术选型
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-06
davexin 写道 江南白衣,讲的很对,RealTime是对垃圾回收做了优化,目标是使响应时间变短,但是要在长时间运行情况下才能体现它的性能,由于时间紧,昨天我们只运行了半个小时左右,所以并没有体现出他的优越性能。也是一种遗憾吧,我想既然bea敢拿出来买,她如果没有那金刚钻,也不敢拿出来招摇了。
又回到了realtime的定义,并不是很快的意思,而是响应时间是可预计的。 而JVM对响应时间可预计性的影响,主要表现在 1.线程调度受操作系统线程调度的影响 2.垃圾收集引起的暂停 所以jrockit选择了动态垃圾收集,以频繁的收集来换取每次中断时间的减少,所以,对吞吐量来说,是反而会下降的。大部分jvm都有吞吐量优先,短暂停时间两种截然不同的垃圾收集算法。 |
|
返回顶楼 | |
发表时间:2007-09-08
呵呵,是的,更确切的说应该是 响应时间可以预计。看来你们这些java大牛对技术的钻研非常的深呀,佩服!
|
|
返回顶楼 | |
发表时间:2007-09-08
现在正在测试weblogic10和tomcat在64位操作系统上的情况,不过有一点还是很有意思的,weblogic10的 64位安装变成 server100_generic.jar,需要先安装jdk1.5才可以再安装weblogic10,安装好jdk后,然后执行 java -jar server100_generic.jar -mode=console,然后就可以一步步地执行了。在32位操作系统上是server100_linux32.bin
,不需要安装jdk就可以安装。顺便给大家2个可以测试用的weblogic10的license,在附件中。只需要将它们的名字改成license.bea,覆盖原来的就可以了。 |
|
返回顶楼 | |
发表时间:2007-09-08
LZ说的太笼统了,采用什么技术或者什么样的软件和硬件框架,需要看你的要求,你的系统的预计的高峰时段并发数量是多少,对服务器产生多大的压力等,只有这些都清楚了,才能说用什么架构?否则要麽资源浪费,要麽资源紧张。
|
|
返回顶楼 | |
发表时间:2007-09-14
我做了6年的网站开发,没有见过那个网站使用tomcat的,5460 和最初的书生网是,sina sohu 263 163用的全是resin 也就是政府网站使用较多weblogic ,主要是OA
java的并发 http://blogger.org.cn/blog/more.asp?name=hongrui&id=25175 http://blogger.org.cn/blog/more.asp?name=hongrui&id=23973 从实际应用的角度来说。-Xmx大了不是很好,垃圾回收需要更多的时间,但是thread问题就很大,配给JVM的内存数越大,tomcat所能开的thread数就越小,最后出现ava.lang.OutOfMemoryError: unable to create new native thread。根据我在windows下编程经验,windows起的线程栈的大小写在可执行文件头,默认是1M。对于java来说,如果采用默认xss设置,jdk1.4每线程256k, jdk1.5每线程1M。如果设置没有超过1M, 又不是默认设置,那么jdk就会为每个线程分配1M。 对于windows来说,32位使用最大内存为2G,如果你给jvm分1.5G,剩余大约500M,供OS使用,其中windows的dll占了一部分,但是你在JVM创建线程的时候,创建的是OS的线程,他要从剩余的空间中分配内存。如果没有可用内存,出现上述错误。 参看hotspot\src\share\vm\runtime\os.c { MutexLocker mu(Threads_lock); JavaThread* signal_thread = new JavaThread(&signal_thread_entry); // At this point it may be possible that no osthread was created for the // JavaThread due to lack of memory. We would have to throw an exception // in that case. However, since this must work and we do not allow // exceptions anyway, check and abort if this fails. if (signal_thread == NULL || signal_thread->osthread() == NULL) { vm_exit_during_initialization("java.lang.OutOfMemoryError", "unable to create new native thread"); } 公式如下 (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads 解决的办法就是减少-Xmx的数量,减少xss的值,或者开启3GB模式。 最主要的还是程序员的编程,对于网络编程,在nio出来之前,每一个线程只能处理一个socket请求,也就是说一个socket连接需要一个线程,这样使服务器的并发收到了限制,压力不能过大,因为服务器开启thread有限,这造成了tomcat的性能远不如apache。nio出来之后,在一个线程内处理几个连接成为了可能,几乎所有的java的开源web服务器,tomcat6,jetty,resin都用nio重写了网络连接部分,不开源的apusic也用了nio。 |
|
返回顶楼 | |
发表时间:2007-09-22
mfc42d 写道 我做了6年的网站开发,没有见过那个网站使用tomcat的,5460 和最初的书生网是,sina sohu 263 163用的全是resin 也就是政府网站使用较多weblogic ,主要是OA
java的并发 http://blogger.org.cn/blog/more.asp?name=hongrui&id=25175 http://blogger.org.cn/blog/more.asp?name=hongrui&id=23973 从实际应用的角度来说。-Xmx大了不是很好,垃圾回收需要更多的时间,但是thread问题就很大,配给JVM的内存数越大,tomcat所能开的thread数就越小,最后出现ava.lang.OutOfMemoryError: unable to create new native thread。根据我在windows下编程经验,windows起的线程栈的大小写在可执行文件头,默认是1M。对于java来说,如果采用默认xss设置,jdk1.4每线程256k, jdk1.5每线程1M。如果设置没有超过1M, 又不是默认设置,那么jdk就会为每个线程分配1M。 对于windows来说,32位使用最大内存为2G,如果你给jvm分1.5G,剩余大约500M,供OS使用,其中windows的dll占了一部分,但是你在JVM创建线程的时候,创建的是OS的线程,他要从剩余的空间中分配内存。如果没有可用内存,出现上述错误。 参看hotspot\src\share\vm\runtime\os.c { MutexLocker mu(Threads_lock); JavaThread* signal_thread = new JavaThread(&signal_thread_entry); // At this point it may be possible that no osthread was created for the // JavaThread due to lack of memory. We would have to throw an exception // in that case. However, since this must work and we do not allow // exceptions anyway, check and abort if this fails. if (signal_thread == NULL || signal_thread->osthread() == NULL) { vm_exit_during_initialization("java.lang.OutOfMemoryError", "unable to create new native thread"); } 公式如下 (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads 解决的办法就是减少-Xmx的数量,减少xss的值,或者开启3GB模式。 最主要的还是程序员的编程,对于网络编程,在nio出来之前,每一个线程只能处理一个socket请求,也就是说一个socket连接需要一个线程,这样使服务器的并发收到了限制,压力不能过大,因为服务器开启thread有限,这造成了tomcat的性能远不如apache。nio出来之后,在一个线程内处理几个连接成为了可能,几乎所有的java的开源web服务器,tomcat6,jetty,resin都用nio重写了网络连接部分,不开源的apusic也用了nio。 对于tomcat和apache的使用,我觉得要结合起来用apache用过静态页面处理,tomcat用作动态页面处理,如果不用tomcat,用resin 性能也不能提高多少,已经做过tomcat6的性能测试,在32位操作系统下,他的性能还不如tomcat4.1(交易量和响应时间),但在64位操作系统下,tomcat6比tomcat4.1的性能有所提高(交易量增加响应时间变短),但是当用户并发超过600时,响应时间超过了10秒,对我们系统来说已经没有意义。也不是说用了nio就可以提高多少性能,在jdk1.5以后,在64位操作系统上,jdk已经没有最大内存的限制,经过测试,当内存用的比较大的时候,当用到交换分区的时候(linux系统),虚拟机会进行内存回收,此时机器压力是比较大的,整个机器基本上是不再响应请求。这一点我觉得你说得还是非常有道理的。但是个人觉得,resin的性能也不会比tomcat强多少的。如果谁有测试数据,请贴出来交流一下。 |
|
返回顶楼 | |
发表时间:2008-03-30
可以很负责的说,4G内存至强单核双路的服务器,安装apache2 + 2个tomcat5实例,做好动态缓存,对于一般的网站应用,并发1500个好不困难.局域网测试并发2000个平均响应时间都在3秒以下。
大家根本不用怀疑tomcat的性能,我认识的好几个硅谷海龟创业,都用的apache+tomcat+oracle,如yeeyoo.com等。 |
|
返回顶楼 | |
发表时间:2008-04-07
现在用ejb,不都是用无状态的session bean做门面吗
|
|
返回顶楼 | |
发表时间:2008-04-07
8000 写道 对于你你们舍得投入巨资买weblogic,买oracle,买几十台HP OR ibm服务器的项目,最好的办法是拨打范凯先生的电话,告诉他们你们需要咨询,几个月后你总共加起来买2台服务器就可以搞定。
这可能是最最捷径的办法,真的! 这个...虽有广告嫌疑,但的确同意。 找BEA的人来搞测试是有失公允的。 找第三方的人来搞还差不多。 性价比还高呢 |
|
返回顶楼 | |
发表时间:2008-04-07
用LoadRunner只支持1000并发。。。
你还不如用开源的OpenSTA,这东西支持CORBA,可以多台客户机一起跑一个压力测试,估计就没有什么用户限制了。 当然我还从没用过这么大并发的测试,也就没有跑过一台以上的客户机测试。 |
|
返回顶楼 | |