tomcat 性能调优

tomcat 性能调优,第1张

java性能优化原则:代码运算性能 内存回收 应用配置(影响java程序注意原因是垃圾回收)

代码层优化:避免过多的循环嵌套 调用和复杂逻辑

Tomcat调优主要内容

1增加最大连接数

2调整工作模式

3启用gzip压缩

4调整JVM内存大小

5作为web服务器时 与Apache整合或Nginx

6合理选择垃圾回收算法

7尽量使用较新版的JDK

生产环境实例

<connector p=""

maxThreads="1000"

minSpareThreads="100"

maxSpareThreads="200"

acceptCount="900"

disableUploadTimeout="true"

connectionTimeout="20000"

URIEncoding="UTF-8"

enableLookups="false"

redirectPort="8443"

compression="on"

compressionMinSize="1024"

compressableMimeType="text/html,text/xml,text/css,text/javascript"/>

参数说明:

orgapachecoyote>为应用程序池 ‘DefaultAppPool’ 提供服务的进程关闭时间超过了限制
服务器经常产生“应用程序池 ‘DefaultAppPool’ 提供服务的进程关闭时间超过了限制。进程 ID 是 ‘2068′。”的错误,导致iis处于假死状态,经了解是IIS应用程序池的设置问题。解决方法如下:
Internet 信息服务(IIS)管理器->应用程序池->DefaultAppPool->右击属性
一、回收
1、回收工作进程(分钟):选中,值为1740
2、回收工作进程(请求数目):不选(原先设置为35000)
3、在下列时间回收工作进程:不填
4、消耗太多内存时回收工作进程:全不选。(2、3、4项可能避免了在访问量高的时候强制回收进程可能引发的服务器响应问题,导致iis假死不响应)
二、性能
只选中空闲超时20分钟。其他都不选。WEB园最大工作进程数为1(默认)。注意web园这里一定要保持默认,如果填写其他超过1的数字就会导致一些网站程序的后台程序打不开或者刷新不停。
原来的请求队列限制为4000,现在无限制。
三、运行状况
前两项都起用,是原来的默认设置。启动时间限制90秒,关闭时间限制180秒。
启动快速失败保护的钩去掉!
为了避免真的遇到很多错误时没有提示,可以不关闭,只是把快速保护的保护范围加大些,例如失败数50次 时间段5分钟 则关闭对应的程序。
“关闭时间限制180秒”是必须的,因为进程关闭的时间,原来为90秒限制,是默认值,如果进程关闭时间超过90秒,则认为超时,从而出现:进程关闭时间超过了限制 日志,所以,适当延长这个时间,可以避免这种错误
第2种方法:
原因:独立进程的 内存堆戋消耗完了,IIS不能创建更多的进程工作空间来处理
解决方法:
1 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC
2 在Parameters键下新建一个DWORD项,名字为:UseSharedWPDesktop 值为1 重启IIS
第3种
问题已解决,发现是数据库连接无法释放,不知道是什么原因,同样的代码在本地就是好的,在服务器端就有问题,最后在连接串里加入以下语句解决问题
Pooling=true; MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30
第4种
新建应用程序池,不同的网站引用不同程序池。
为应用程序池 ‘AppPool #1′ 提供服务的进程关闭时间超过了限制。进程 ID 是 ‘3000′。
出现上面情况后,该应用程序池对应的网站就访问的非常慢,几乎是打不开。
这种现象是不是iis假死?
重启下该站点,问题可以得到解决。
可能是应用程序池设置问题,不知道具体应该怎么设置!
请高手指点。
程序代码解决办法:
1 设置进程池回收时间在进程池属性里
2 如果你的程序是使用 asp + acc 数据库且acc数据库大于30m建议更换sql数据库 acc数据库大于这个值2003系统下会造成iis6的频繁假死2000下会造成dllhostexe占用大量cpu及内存资源都会严重影响 web访问速度
3 asp程序存在死循环
4 可使用 microsoft office 压缩修复acc数据库,须先备份
引用内容2003应用程序池假死常见问题及解决方法
2006-10-09 09:48
经常见到大家谈起,2003应用程序池自动死了,不能恢复了,一直出现 Service Unavailable 常见方法如下。
1:以前没有SP1打补丁的时候会出现这个IIS6。0假死问题,但现在微软都在自动更新里面出补丁了,一般你打好最新补丁后是不会出现此问题了。(所以现在的IIS假死与这个关系不是很大)
2:从IIS60开始CPU资源都在应用池里面限制了,不象以前的IIS。5。所以假死的池的缘故就是池被拉死,你在网站打不开的时候可以看到你的某个应用池是禁用的,上面出现一个红叉。你鼠标右键启动网站又会自动恢复。 这个原因:大概是以下几个因数造成的。
(1):你限制了应用池的资源限制,限制得太小 比如:50这样或更少更多一点,这个时候如果你这个池下面的网站占用CPU太高,比如超过50% 那么5分钟后他就自动死了,手工默认建立的应用池默认是超过资源不 *** 作。
出现上面这个情况解决方法:1:不限制CPU资源,(这个是不可取的,不限制资源,有的程序有BUG占用资源厉害了的,服务器都会被拉死,你可能都无法 *** 作服务器。)2:在超过资源那里选择关闭,这个关闭默认是失败5次,90秒内恢复,一般默认就可。网站能自动恢复,这个关闭:不是永久关闭,意思是超过资源关闭,然后在某时间内自动恢复池。不 *** 作就是不恢复,这个是很多人的误区。上次我写过相关的这个讲解了。
(2):内存限制 在IIS6。0应用池上面有虚拟内存和最大内存限制,如果你设置了这个。那么网站访问量大了 也会出现假死,所以不建议设置这里。默认就可。
3:就是服务器自身内存太小,网站运行当然需要使用到内存了,当内存不够的时候应用池也会死掉变成禁用。那么只有等内存全部释放出来才能恢复应用池了。出现这个情况:那么你就要考虑加内存或者检查到底是什么程序占用了内存了。比如MSSQL数据库,这个可是吃内存得大户啊,最好别和WEB服务器同时一个服务器上。很多人用1G内存做 2003系统,2003NET结构是很占用内存的,所以做服务器选2003还得把内存加到2G或更高才好。内存不够上面 2点讲到的,是没办法 *** 作了,也无法自动恢复。
4:就是ACCESS数据库太大或查询太多,这个也会出现把IIS拉死,解决方法;修复ACCESS数据库,或尽量少用ACCESS数据库。
5:不同网站用不同应用池:根据你自己实际情况而定,站点大的最好独立一个应用池,限制他的资源超过了自动回收,看上面(1)讲到的,这样就不影响其他站点。中型站点:多个网站共用一个应用池,比如5个站点用一个池,设置他资源时间等等。这样他们就算超资源了也不影响其他应用池的网站。
6:设置回收时间:很多人以为设置回收池越短越好,其实是错误的,每次回收当然是把内存回收回来了,但加重了一次服务器的负担,当服务器比较繁忙的时候,有可能导致其他应用池死。所以建议设置共1000就行了。其他独立池按照他网站流量而设置 可以设置600 也行,共用的不建议设置太短。
7:网站后台过不了多久自动退出又要重新登陆:这个情况就是你设置回收时间太短了,按照 6点设置吧。 不要设置什么20分、30分这样的,这样不好的。

进程管理-防止进程成为僵尸进程
创建好了进程,那么怎么对子进程进行管理呢?
使用信号,对子进程的管理,一般有两种情况:(推荐学习:PHP编程从入门到精通)
posix_kill():此函数并不能顾名思义,它通过向子进程发送一个信号来 *** 作子进程,在需要要时可以选择给子进程发送进程终止信号来终止子进程;
pcntl_waitpid():等待或返回fork的子进程状态,如果指定的子进程在此函数调用时已经退出(俗称僵尸进程),此函数将立刻返回,并释放子进程的所有系统资源,此进程可以避免子进程变成僵尸进程,造成系统资源浪费;
孤儿进程:父进程挂了,子进程被pid=1的init进程接管(wait/waitpid),直到子进程自身生命周期结束被系统回收资源和父进程 采取相关的回收 *** 作
僵尸进程:子进程exit退出,父进程没有通过wait/waitpid获取子进程状态,子进程占用的进程号等描述资源符还存在,产生危害:例如进程号是有限的,无法释放进程号导致未来可能无进程号可用
父进程中使用:pcntl_wait或者pcntl_waitpid的目的就是防止worker成为僵尸进程
作用:使用pcntl_wait()后,在子进程死掉后,父进程也会被停止
最后我们通过下图来简单的总结和描述这个多进程实现的过程:
a34c883897ee2a99833e0ad1e26c1fd4png
进程管理-进程间通信
队列:如Redis,推荐
socket:推荐
管道:实现复杂,且管道(pipe),使用文件形式存在,存在硬盘IO性能瓶颈
信号:承载信息量少,不好管理
进程管理-切换为守护进程
使用&实现
php deadloopphp &
相关资源:Nginx使用的php-fpm的两种进程管理方式及优化-其它代码类资源
打开CSDN APP,看更多技术内容
php 进程管理,PHP 进程管理器 PHP-FPM_阿喵看海外的博客
php-fpm是PHP的一个进程管理器。php下面的众多work进程皆有php-fpm进程管理器管理。 php-fpm的工作原理 php-fpm全名是PHP FastCGI进程管理器。php-fpm启动后会先读phpini,然后再读相应的conf配置文件,conf配置可以覆盖phpini的配置。
继续访问
php-fpm解读-进程管理的三种模式_april2nd的博客_php-fpm
php-fpm进程管理一共有三种模式:ondemand、static、dynamic,我们可以在同一个fpm的master配置三种模式,看下图1。php-fpm的工作模式和nginx类似,都是一个master,多个worker模型。每个worker都在accept本pool内的监听套接字(linux已不存在惊
继续访问
浅谈PHP进程管理
这篇文章是对之前一篇文章的补充和改进, 创建一个主(master)进程,主进程安装定时器,每隔5分钟检测一次队列长度,根据队列长度计算需要的worker进程, 然后创建或者杀掉子进程。这样做的好处是防止队列堆积,任务得不到及时处理。更新业务代码,只需要reload *** 作即可。 整个流程有以下知识点: 创建守护进程的步骤: 设置默认文件权限 fork一个进程,父进程退出 调用setsid创建一个新的会话 将当前工作目录更改为根目录 关闭不再需要的文件描述符 使用信号实现定时器 上一篇定时器依赖于系统的定时任务,这次使用闹钟信号实现,php 530以下的版本依赖于ticks,
php 脚本 fpm缓存,PHP生命周期及fpm(FastCGI进程管理器)的运作方式
PHP在web方式中如何改了文件就立即生效的,重要的几个概念:sapi: 可以简单的理解为php引擎对外的一个统一接口,使得php可以和外部程序进行交互php的生命周期中关键四个调用: MINT -> RINT -> RSHUTDOWN -> MSHUTDOWNfpm: fastcgi进程管理器fpm方式的流程就是:fpm通过sapi接口与php进程交互1fpm启动会调用各扩展
继续访问
Linux下搭建PHP开发环境,Php-Fpm进程管理。_黑夜开发者的博客
目前PHP项目开发几种比较流行的架构搭建中,LNMP在性能方面是最好的,正因为如此,使得LNMP架构逐渐流行起来,今天,前面提到了Nginx部署,由于项目实际环境的需要,今天就在说一下怎么部署PHP。 环境
继续访问
php而为,为高负载而生的 PHP 进程管理器 —— PHP-PM (PPM)
PHP-PM 可以用于php应用程序的进程管理,增压和负载均衡它使用 ReactPHP 实现php的事件驱动和非阻塞I/O。 它是基于 ReactPHP,最好是工作在基于请求-响应式的框架,像Symfony的>

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10747370.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存