1.jvm参数调优
-XX: + PrintGC
-Xms
-Xmx
-Xmn
等等一些内存配置,和日志打印
这些jvm内存有关的代码,是写在eclipse在run的时候的configuration里面
一般eden区是s0区的2倍
2.jvm参数设置的几个原则
垃圾回收次数尽可能的少
新生代内存比老年代小
在生产环境一般情况下:新生代 : 老年代 = 1 : 2
eden区 : s0区 = 8 : 1 : 1
jvm的调优,主要就是针对在堆内存的调优
在实际项目中jvm的内存调优设置,一般都是在tomcat,这里eclipse是做测试用
3.内存溢出 & 内存泄露
内存溢出,指的就是,你的使用的obj阿等没有足够大的内存来使用,这样内存不够obj溢出了
而内存泄露指的是,明明已经是null的obj或者已经是不再使用的obj,但是没有被回收,这样就导致了内存泄露,:有一部分内存明明是可以被回收的,但是没有回收,反而占用了内存,可能最终会导致内存溢出
4.栈溢出
当使用递归的时候,在栈内存里面有一个叫做深度的概念,一定的内存容量对应一个深度,2者正相关,如果内存小,深度低
那么,递归循环的次数也就少
循环遍历则不会,只有递归的时候才会栈溢出
5.并行回收 & 串行回收
串行回收是单线程的,并行回收是多线程的
高并发的大项目都是用的并行回收
到时候学事务,spring,会讲到吞吐量,qbs,一个后台搭建好以后,肯定是要测的.......
6.收集器:具体回收垃圾的一个功能器
常见的串行收集器:serial收集器
常见的并行收集器:parallel收集器
CMS收集器,响应时间优先,减少垃圾回收的停顿时间,很多大型服务器都使用的CMS
G1收集器:目前用的最多的收集器
并行:多处理器处理多任务
并发:单处理器处理多任务
7.Jmeter
使用Jmeter来测试一下服务器的性能测试
同样的设计到的软件还有LoadRunner,Badboy类似的这种
8.插话
之前的后台项目在搭建完以后,肯定是要进行吞吐量测试,稳定测试,这个测试其实很简单,机器自动测试就行了的,还有那么多种软件,但是...之前的项目我估计没有测试...以后只要是后台搭建的项目,必然是要测试一下,才可以优化吞吐量qps等,知道如何改进,优化,有bug也可以及时的找出来
9.防止模拟请求(爬虫)
有一些框架Nginx会自带有防止的,还有就是token验证,企业级白名单
10.实际测试:
1.串行回收
2.并行回收
3.CMS回收
4.G1回收
以上的所有测试细节,不再赘述,直接讲结.
调优结论:
初始值必须要跟最大值一致
初始堆值越高,吞吐量就越高.
吞吐量和堆最大的内存无关,当然,在初始值与最大值一致的情况下,肯定是最大值越搞吞吐量越大
CMS回收,吞吐量大于上述并行回收
真正的测试一定要把项目挂载在linux服务器上再测
最后使用并行收集器,跟串行比较,速度快,吞吐量高
设置堆内存新生代和老年代的比最好是 --> 1:2 或者 1:3