1、如果启动什么都不设,会怎样?
先来看一个命令
[root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
一般来说,什么都不设,应用程序的初始内存会很大,垃圾回收器使用的是ParallelGC,这个在新生代是没什么问题的,但问题时老年代,老年代用的是串行回收器,这对于多核CPU来说是一个巨大的浪费,建议配置:-Xmx256M -Xms64M(这两项根据实际情况定,建议设为相等) -XX:+UseParallelOldGC -XX:ParallelGCThreads=8(具体根据你的CPU核数设定) -XX:PermSize=32M(根据你的应用程序产生的类的数量决定)
2、一个网站的最大并发量和吞吐量
首先吞吐量并不等于并发量,吞吐量是 每秒钟request/事务 数量 ,并发量是 系统同时处理的request/事务数
吞吐量 = 并发量/响应时间。
有时候有很大的吞吐量的时候未必能构成并发,因为有时间间隔,要达到并发需要访问量足够大,几乎同时到达。
最大吞吐量是有极限的,跟单台服务器的配置以及JVM的设参有关系,因为GC回收垃圾需要时间,系统不响应你也没办法。
最大并发量其实跟系统有关,是一个计算机术语,哪怕是1秒内,相差毫秒级也不会构成并发,构成并发其实是同时,这个值跟计算机的线程数有关系,而线程数又跟计算机的核数有关系,这个值也不是越大越好,因为线程切换需要时间,线程多了反而会拖慢系统。
这里面有些是个人见解,如果有不对,欢迎大家指出,谢谢!
3、压测最大吞吐量的方法
Jmeter压测,设置线程参数,Http请求参数以及混合报表。
具体这个Throughput值就是我们要的吞吐量的极限值。再乘以一天的秒数就是日最大吞吐量。