如何评估服务所需资源.给你一台服务器Jvm怎么配才合理

441 阅读2分钟

这篇文章是给自己记录mark用的.

大家好,我是傻鱼,这个就是我个人记录mark用,大家看看并发表意见,欢迎私信讨论.

主要步骤流程如下

  • 1.对使用场景的分析.

如果是中间件,kafka rocketmq需要考虑业务的场景,什么时候业务高峰期,什么时候业务低谷期,高峰期的流量峰值是多少,需要选择什么合适的中间件满足这个要求.

  • 2.物理机\虚拟机评估.

虚拟机主要是根据集群情况,判断单机大概的量.来判断物理机器大概要多少内存,多少cpu.

  • 3.磁盘大小评估.

如果是文件存储类型,类似于cos,es,hbase之类的则需要对数据的量级,以及数据大小进行评估.

  • 4.内存评估.

本地运行单个服务的压力,这个可以看各个压测报告进行判断.

  • 5.cpu压力评估.

Cpu压力往往是我们运行考虑最少的一点,因为通常来说cpu都会随着内存上涨而上涨,而我们如果不是计算集中型服务很少会出现cpu达到峰值的情况.

  • 6.网络需求评估.

这个需要计算计算机qps吞吐量,每次吞吐量的io情况,类似于加载模型,大对象传输,这个就很需要对网络进行评估. 评估方法同压测.进行大io对象跑峰值压力.

  • 7.集群规划.

这个比较考验同学的架构能力,通常情况下微服务都是进行动态横向拓展,一个一个服务部署,这个部分建议能用钱解决的事情,就用钱解决(多买几台性能好的服务器).

如何分配jvm虚拟机一个问题:

如果给你一个32g 4核的机器作为java的服务器. 你的jvm参数分别应该设置为多少才合理.

答案:1/2总内存.

一般jvm虚拟机堆的建议参数是total机器的1/4 所以他的-xms,-xss应该是8g,但是在实际应用上我们发现堆空间内存可以再扩大一点. 所以在日常应用中如果一个服务器只运行java之后,我会分配1/2的内存.

为什么不建议到3/4以上的内存:很多时候日志排查需要安装arthas,这个也需要大量内存. 其次就是一般来说年轻代Eden区的空间一般为堆空间的1/2所以按照上述的分配方法.

java程序运行过程实际可能已经占用24G的内存了.另外还需要给一定的空间给方法区和本地方法栈.如此计算.建议的堆空间为1/2.