一、Petcat 9.0.89d有哪些改动?

   1. 将NIO的程度从40%提高到95%。

   2. 进一步避免白白浪费内存,将同时在线人数提高10%左右。

 

二、Petcat 9.0.89c有哪些改动?

   1. 较完美地实现了PetcatExecutor。理论上,对很多网站,PetcatExecutor能将网站的并发度提高50%-10倍,并使网站在高峰用户访问时仍然流畅,并使网站不容易被黑客黑掉。

   2. 将http连接20s不活动就close,改成http连接5分钟不活动就close。以改善网站流畅度。

   3. 对sendfile做2处不一样的理解和处理,以提高并发度和流畅度。

   4. 将Socket的读缓存从8K改为2K,避免白白浪费内存,将同时在线人数提高10%左右。

   5. 将examples这个Context默认支持FileUpload,请注意其META-INF/context.xml的改动,并在WEB-INF/web.xml里配置了Upload2这个Servlet,这个Servlet是演示FileUpload的。

   c版Petcat不用担心黑客攻击和宕机。

  6. TomProbe增加了Connector的Executor的RejectException数监测,这是重要数据,反映网站在高峰用户访问时是否吃得消和流畅。

  7. TomProbe可以查看历史时点的外来线程和死锁线程的线程名。

  8. 内存快用光时的处理更合理。      

 

三、Petcat 9.0.89b有哪些改动?

1. 在内存快用光时,停止接收新连接。还改正了另外2处不稳定隐患。 

2. 将广义的同时在线人数提高约2倍。

3. 修改了log体系。

4. 改正了在Linux下启动很慢且控制台无输出的问题。

5. 改正了在启动失败时,窗口一闪而过的问题。

6. 改正了因误删temp子目录而导致一些程序运行失败的问题。

7. 将Endpoint的maxConnections的默认值设置为-1而不是8*1024,-1表示不设上限。

 

 

四、说明

 

Q1. 把Endpoint的maxConnections的默认值从8*1024改成-1,这么小的事也值得一提?您与那些假国产莫非是同路人。

答:您的服务器内存可能是4G,也可能是8G或更大,maxConnections配置小了,大浪费;配置大了,服务器吃不消甚至宕机。现在b版的Petcat在内存快用光时,停止接收新连接。即:b版的Petcat自己准确地告诉您maxConnections是多少,无需您来配置。

 

Q2:若我的Petcat带的连接太多,我怎么知道服务器是否忙得过来,响应是否迅速?

答:用TomProbe查看Connector的队列里的Task数,查看服务器的CPU、在用线程数等情况。

把Endpoint的maxConnections的默认值从8*1024改成-1,是本次b版改动中的最伟大、最重要的改动,可能带来大成果。当然,这是以b版在内存快用光时停止接收新连接为前提的。

 

Q3: 请说说b版的log体系修改成怎样了?

答:b版把Tomcat的采用JDK自带log框架的做法彻底去掉了,也把AccessLog当成了普通log的INFO级处理。Tomcat的log体系导致Tomcat在Linux下启动时控制台无输出,要查看catalina.out,很不方便;同时对log文件的管理也很差。

 

Q4: 我的servlet或jsp程序里采用了org.apache.juli.logging.Log类,迁移到b版Petcat时,是否要改动?是否还能写log?

答:无需做任何改动。仍然写了log,log写在logs目录下的petcat-m-d.an.txt文件。

 

Q5: b版的Petcat是否可以将log彻底关掉?一条日志也不写。我知道,写日志是写硬盘操作、是昂贵的。 

答:把/conf目录下的petcat.xml文件里的Log标签里的level属性设置成level="OFF",启动Petcat,就把Petcat的log彻底关掉了,一条日志也不写。而Tomcat的AccessLog对用户访问的日志好像是无法关掉的。

 

Q6:请解释“将NIO的程度从40%提高到95%”这句话的意思。 

答:先说NIO的意思,N: non-block,I: Input, O: Output。

Tomcat 9和Tomcat 10的NIO的实现程度并不高(低版本的Tomcat的NIO程度更低),实现情况如下:

Http请求行和Http头的读:完全的non-block,标准的NIO;

PostBody(包括FileUpload):完全的block,是BIO;

Sendfile:non-block,但Response Header的输出是BIO;

其余的Output:全部是BIO,包括servlet和jsp的响应,异步servlet的响应。

d版Petcat的NIO的实现情况如下: 

Http请求行和Http头的读:完全的non-block,标准的NIO;

PostBody(包括FileUpload):小于8K是NIO,否则是BIO;

Sendfile:non-block,Response Header的输出也是NIO;

其余的Output:全部是NIO,包括servlet和jsp的响应,异步servlet的响应。

 

Q7:为何不100%的NIO,把大于8K的PostBody的读也采用non-block读?

答:A叫我向东,B叫我向南,C叫我向西,D叫我向北,我无法同时满足他们。

Servlet和jsp规范的设计可能没考虑到大体积的PostBody,要满足所有的Servlet和jsp规范就不可能对大体积的PostBody进行non-block读。

当然,如果您的网站没有大于8K的PostBody,那么您的网站采用d版Petcat,已经是100%的NIO了。