高性能硬件上的程序部署策略
高性能硬件上部署程序,主要方式有两种:
- 1.通过64位的JDK来使用大内存
- 2.使用若干个32位虚拟机建立逻辑集群来利用硬件资源
对于用户交互性强、对停顿时间敏感的系统,可以给java虚拟机分配超大堆内存的前提是有把握把应用程序的Full GC频率控制的足够低,至少低到不会影响用户使用,譬如十几个小时或者一天出现一次Full GC,这样可以通过深夜执行定时任务的方式出发Full GC,甚至自动重启应用服务器来将内存可用空间维持在一个稳定水平。
控制Full GC频率的关键是看绝大多数的对象是不是符合‘朝生夕灭’的原则,即大多数对象的生存时间不应该太长,尤其是不能成批量的,长时间生存的大对象,这样才能保证老年代的稳定。
除此外计划使用64位JDk来管理超大内存还要考虑以下问题:
- 1.内存回收导致的长时间停顿
- 2.现阶段,64位JDK的性能测试结果普遍低于32位JDk
- 需保证应用程序足够稳定,因为这种应用要是产生堆溢出就无法产生堆转储快照
- 4.相同应用程序在64位JDK消耗内存比32位大,由于指针膨胀数据类型
使用逻辑集群方式来部署应用程序,可能会遇到以下问题:
- 1.尽可能的避免节点竞争全局资源,最典型的就是磁盘竞争,各个节点同事访问某个磁盘文件很可能导致IO异常
- 2.很难高效利用资源池,例如连接池,一般都是节点建立自己的连接池。
- 3.仍然不可避免的收到32位程序的内存限制
- 4.大量使用本地缓存的应用会曹成内存浪费,此时可以考虑使用集中式缓存