jvm调优

高性能硬件部署方案:1.通过64位jdk来使用大内存

                              2.使用若干个32位虚拟机建立逻辑集群来利用硬件资源

通过64位jdk来使用大内存要求:需要应用程序的full gc频率控制的足够低(大多数对象生存时间不应太长,尤其不能有成批量、长生存时间的大对象产生),譬如十几小时乃至一天才出现一次,这样可以通过在深夜执行定时任务的方式触发full gc甚至自动重启应用服务器来保持内存可用空间在一个稳定水平。

    可能面临问题:1.内存回收导致的长时间停顿

                         2.现阶段64位jdk的性能测试普遍低于32位jdk

                         3.需要程序足够稳定,因为应用一旦产生堆溢出几乎无法产生堆转储快照(因为腰产生十几gb乃至更大的dump文件),就算产生了也几乎无法分析

                         4.相同程序在64位jdk消耗的内存一般比32位jdk大,这是由于指针膨胀,以及数据类型对齐补白等因素导致的

使用若干个32位虚拟机建立逻辑集群来利用硬件资源:具体做法是在一台物理机上启动多个应用服务器进程,每个服务器进程分配不同端口,然后在前端搭建一个负载均衡器,以反向代理的方式来分配访问请求。目的只是为了尽可能利用硬件资源,不需要关心状态保留、热转移之类的高可用性需求,建议使用无session复制的亲合式集群。我们只需要保障集合具备亲合性,也就是均衡器按照一定算法将一个固定用户请求永远分配到一个固定的集群节点处理。

    可能面临问题:1.尽量避免节点竞争全局资源,最典型的就是磁盘竞争

                         2.很难最高效率利用某些资源池,譬如连接池(某些节点池满了另外一些节点仍有较多空余)。可使用集中式的jndi,但是较复杂并且会带来额外的性能开销

                         3.各个节点不可避免受到32位的内存限制

                         4.每个节点大量使用本地缓存,使用集中式缓存解决

-----------------------------------------------------------------------------------


常用服务器参数:-XX:+HeapDumpOnOutOfMemoryError

                        -Dsun.awt.keepWorkingSetOnMinimize=true  (保障windows下,程序在恢复最小化时能够立即响应)

实时通讯技术:逆向ajax(也称comet活着server side push)

跨系统异步调用存在的问题:若两边服务速度完全不对等,时间越长累积了越多web服务没有调用完成,导致在等待的线程和socket连接越来越多,最终超过虚拟机的承受能力使得虚拟机进程崩溃。解决方法:将异步调用改为生产者/消费者模式的消息队列。



阅读更多

没有更多推荐了,返回首页