直接优化JVM 和 Tomcat JVM优化有什么区别
以tomcat-8014和jdk180_20为基准,服务器为ubuntu。“java -Xmx3550m -Xms3550m -Xmn2g -Xss128k ”是可以直接命令行设置JVM参数吗?是一次性的而重启后失效吗?这样可以设置jvm的参数;是一次性的。
我们在性能优化的时候,最常用的是使用 (视服务器内存情况进行调整)
-Xms512M -Xmx1024M其中
XMS : JVM初始分配的堆内存
XMX : JVM最大允许分配的堆内存,按需分配
堆内存分配:
JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;
JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
说明:如果-Xmx 不指定或者指定偏小,应用可能会导致javalangOutOfMemory错误,此错误来自JVM,不是Throwable的,无法用trycatch捕捉。
Tomcat支持1万并发的原因是因为它具有以下几个特点和优势:
1 多线程处理:Tomcat采用多线程的方式处理客户端请求。当有新的请求到达时,Tomcat会创建一个新的线程来处理该请求,而不会阻塞其他请求的处理。这样可以有效地提高并发处理能力。
2 连接池管理:Tomcat通过连接池管理数据库连接,避免了频繁地创建和销毁连接的开销,提高了数据库的访问效率。连接池可以复用已经建立的连接,减少了连接的创建和销毁时间,从而提高了并发处理能力。
3 静态资源缓存:Tomcat可以对静态资源进行缓存,例如、CSS和JavaScript文件等。通过缓存静态资源,可以减少对磁盘IO的访问,提高响应速度和并发处理能力。
4 集群和负载均衡:Tomcat支持集群和负载均衡的部署方式。通过在多台服务器上部署多个Tomcat实例,并使用负载均衡器来分发请求,可以将负载均衡到不同的服务器上,提高整体的并发处理能力。
此外,还可以进行一些额外的优化和调整来进一步提高Tomcat的并发处理能力,例如调整线程池大小、优化代码逻辑、使用缓存等。需要根据具体的应用场景和需求来选择合适的优化策略。
开发的过程中,每次启动tomcat,日志中总会打印如下的警告。一直以来,都不影响项目的正常运行,所以,都置之不理。但是,昨天,在梳理日志打印内容的时候,我强迫症又犯了,就想对这个问题一探究竟。在网路上,一通搜索猛如虎,查到的答案都是二百五。实在是不能做种优雅的,把这个日志提示的问题解决掉。我就梳理总结一下,我自己的解决过程吧。
通读上面的警告信息,其中包含 TLD 这样一个关键词,我们就从这里入手。然后,顺藤摸瓜,发现这一步是为 JSP标签 功能服务的。我们搜索是从知识上层往下层发现的过程。真正要掌握知识,就需要从底层开始梳理,最后到达上层的应用。我就尝试通过这样一个逻辑来梳理一下。
翻译如下:
Tomcat又是如何参与到JSP的运行中呢?我们查下JSP原理,就可以知道:
JSP页面里包含了JSTL等这样的标签。我查了一圈,也没有看到对JSP标签有一个合理的解释。我理解一下,就是JSP标签就是把通用的、结构化的任务,比如迭代,条件判断,XML文档操作等这些操作抽象为一些标签,方便开发者使用。我们就拿JSTL标签库来举例吧。
Tomcat为了解析这些标签,就要寻找TLD配置文件。寻找这些配置文件,就要像大海捞针一般,去扫描每一个jar包里的内容。在项目依赖日益庞大的情况下,这项扫描工作就变得异常耗时了。
请看原来的启动耗时:
对比一下,优化之后的耗时:
可以说启动性能有了大幅提高,也说明扫描真的很耗时。
好了,说明白了警告信息背后的原理,那么解决起来,应该说就是轻而易举了吧。我们按照警告日志的指示来做:
看完注释,那个心啊,我就想起了康师傅说的一句话:低头走路,也要时不时抬头看看方向。所以,我们完全可以直接配置jarsToScan即可。
写到这里,我在想,上面所有的知识,都是我通过中文互联网找到的二手消息。有没有直接从官网去找一手的,没有被别人咀嚼过的内容呢?我想尝试一下。
这还是我在明确知道,我要找什么内容的情况下,不知道的话,真的是瞎子摸象了。这也是搜索引擎存在的意义了。
部分内容来自于: https://wwwcnblogscom/qqiua/p/9743348html
命,方如一朵永不凋谢的花!
-----------------------------------------------------------------------------------
要说最尊敬的老师吗,那就要数胡哲老师了,我感谢阳光,它带给我温暖;我感谢清泉,带给我甘甜;我更感谢我的写作老师,他带给我鼓励的微笑“岂有此理!胡说八道!”一听这熟悉的话,你就知道我们的写作老师来了
我的写作老师叫胡哲,是我师范时的写作老师他个子不高,年纪不大,可头发却白了一半儿他穿着上也很不讲究,一年四季总是那一袭蓝布衣裳,与其他老师形成鲜明的对照最令人难忘的是他宽宽的脸上戴着一副深度近视镜和镜片后那一双永远深邃的眼睛他的形象不好看,可却爱笑,一笑起来,就露出一对难看的大大的
1)TIME_WAIT: 状态的连接达到了 709
sql server占用的TIME_WAIT最多,还有nginx, tomcat都有一些处于 TIME_WAIT状态。
2)并且最大的端口达到了 65327 ,六万多,几乎接近端口的最大值 65535
因为是 Windows server 2008,不同Linux下的TCP的调优。
解决方法:将 TcpTimedWaitDelay 调到 30S,让 TIME_WAIT 状态的维持最多30S,默认是4分钟。
如何查看或设置TcpTimedWaitDelay:
cmd中运行 regedit 命令,找到 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/TCPIP/Parameters 注册表子键
看看有没有 TcpTimedWaitDelay 项,有的话直接修改,没有的话创建一个并创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制 30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。 停止并重新启动系统。 缺省值:0xF0,它将等待时间设置为 240 秒(4 分钟)。 建议值:最小值为 0x1E,它将等待时间设置为 30 秒。
修改之后,重启系统,在观察,TIME_WAIT在100左右徘徊。效果还是立竿见影的。几天来一直再也没有出现Tomcat假死的情况。
希望可以帮你。
1服务器:不要单独用tomcat部署你用apache+tomcat因为apache处理静态资源的能力大大超越tomcat所以能减轻tomcat的压力,让tomcat只是处理servlet请求。具体整合你自己去网上查查
2数据库:连接数据的时候最好用连接池,能用数据库做的事情尽量用数据库做,数据库的执行效率肯定比java高
3缓存技术:利用缓存技术这个要根据你用的框架来定比较常用的缓存技术ehcache,oscache,分布式缓存(这个我没用过)
4模板技术:模板技术把那些经常访问的而且变化很少的页面用模板技术展示主要有:freemark velocity
5:SSI页面包含技术这个可以提高的不多具体自己上网查技术实现
1》、入口。解决问题一般总是从降低RT开始。
2》、冲突。在增加资源的时候引起RT的上升(例如增加压力导致依赖系统处理性能下降)
3》、权衡。但当降低RT会增加系统复杂度和稳定性的时候,就会考虑通过增加资源来缓解问题(前提是不会增加RT)。
4》、全局观。优化后瓶颈转移带来的问题。
影响RT的关键指标:
1》、关键路径事务处理时间。(并行化和串行化可部分解决关键路径时间长短问题)
2》、瓶颈查找(资源池的瓶颈在哪里,处理时间消耗环节在哪里)
acpu,memory,io,jvm等系统级别影响RT的因素定位。
b业务关键路径中可提升的step。
c优化后瓶颈可能转移的考虑,整体上可能导致RT时间反而增加。
d降低资源池资源生命周期,提升回收率。(事件驱动就是很好的模式,将生命周期切割为更小片段,有状态线程生命周期越短,处理能力越强。副作用:系统复杂)
最后还是自己在做异步化的最大感受,一定要有全局观,系统内部全局观,系统之间的全局观,优化是对用户体验的优化而不是系统的优化。
0条评论