锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 app、小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官! 接下来的是今日的面试题:
====tomcat 优化教训?
优化连贯配置. 这里以 tomcat7 的参数配置为例,须要批改 conf/server.xml 文件,批改连接数,敞开客 户端 dns 查问。
参数解释:URIEncoding=”UTF-8″ : 使得 tomcat 能够解析含有中文名的文件的 url,真不便,不像 apache 里还有搞 个 mod_encoding,还要手工编译 maxSpareThreads : 如果闲暇状态的线程数多于设置的数目,则将这些线程停止,缩小这个池中的线程总 数。minSpareThreads : 最小备用线程数,tomcat 启动时的初始化的线程数。enableLookups : 这个效用和 Apache 中的 HostnameLookups 一样,设为敞开。connectionTimeout : connectionTimeout 为网络连接超时工夫毫秒数。maxThreads : maxThreads Tomcat 应用线程来解决接管的每个申请。这个值示意 Tomcat 可创立的最大 的线程数,即最大并发数。acceptCount : acceptCount 是当线程数达到 maxThreads 后,后续申请会被放入一个期待队列,这个 acceptCount 是这个队列的大小,如果这个队列也满了,就间接 refuse connection maxProcessors 与 minProcessors : 在 Java 中线程是程序运行时的门路,是在一个程序中与其它管制 线程无关的、可能独立运行的代码段。它们共享雷同的地址空间。多线程帮忙程序员写出 CPU 最 大利用率的高 效程序,使闲暇工夫放弃最低,从而承受更多的申请。通常 Windows 是 1000 个左右,Linux 是 2000 个左右。useURIValidationHack: 咱们来看一下 tomcat 中的一段源码:
【security】
if (connector.getUseURIValidationHack()) {
String uri = validate(request.getRequestURI());
if (uri == null) {
res.setStatus(400);
res.setMessage(“Invalid URI”);
throw new IOException(“Invalid URI”);
} else {
req.requestURI().setString(uri);
// Redoing the URI decoding
req.decodedURI().duplicate(req.requestURI());
req.getURLDecoder().convert(req.decodedURI(), true);
能够看到如果把 useURIValidationHack 设成”false”,能够缩小它对一些 url 的不必要的查看从而减省开
销。
enableLookups=”false”:为了打消 DNS 查问对性能的影响咱们能够敞开 DNS 查问,形式是批改
server.xml 文件中的 enableLookups 参数值。
disableUploadTimeout:相似于 Apache 中的 keeyalive 一样
给 Tomcat 配置 gzip 压缩 (HTTP 压缩) 性能
compression=”on”compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/JavaScript,text/css,text/plain”
HTTP 压缩能够大大提高浏览网站的速度,它的原理是,在客户端申请网页后,从服务器端将网页文件压缩,
再下载到客户端,由客户端的浏览器负责解压缩并浏览。绝对于一般的浏览过程 HTML,CSS,javascript ,
Text,它能够节俭 40% 左右的流量。更为重要的是,它能够对动静生成的,包含 CGI、PHP , JSP , ASP
, Servlet,SHTML 等输入的网页也能进行压缩,压缩效率惊人。
1)compression=”on”关上压缩性能
2)compressionMinSize=”2048″ 启用压缩的输入内容大小,这外面默认为 2KB
3)noCompressionUserAgents=”gozilla, traviata”对于以下的浏览器,不启用压缩
4)compressableMimeType=”text/html,text/xml”压缩类型
最初不要忘了把 8443 端口的中央也加上同样的配置,因为如果咱们走 https 协定的话,咱们将会用到 8443 端 口这个段的配置:
<!–enable tomcat ssl–>
<Connector port=”8443″ protocol=”HTTP/1.1″
URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false”disableUploadTimeout=”true”connectionTimeout=”20000″
acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″
useURIValidationHack=”false”
compression=”on”compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
SSLEnabled=”true”
scheme=”https”secure=”true”
clientAuth=”false”sslProtocol=”TLS”
keystoreFile=”d:/tomcat2/conf/shnlap93.jks”keystorePass=”aaaaaa”/>
====tomcat 内存调优?
内存形式的设置是在 catalina.sh 中,调整一下 JAVA_OPTS 变量即可,因为前面的启动参数会把
JAVA_OPTS 作为 JVM 的启动参数来解决。
具体设置如下:
JAVA_OPTS=”$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 –
XX:SurvivorRatio=4″
其各项参数如下:
-Xmx3550m:设置 JVM 最大可用内存为 3550M。
-Xms3550m:设置 JVM 初始内存为 3550m。此值能够设置与 -Xmx 雷同,以防止每次垃圾回收实现后 JVM 从新分配内存。
-Xmn2g:设置年老代大小为 2G。整个堆大小 = 年老代大小 + 年轻代大小 + 长久代大小。长久代个别固定大
小为 64m,所以增大年老代后,将会减小年轻代大小。此值对系统性能影响较大,Sun 官网举荐配置为整个堆
的 3 /8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0 当前每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256K。更具利用的线程所需内存大小进行调整。在雷同物理内存下,减小这个值能生成更多的线程。然而操作系统对一个过程内的线程数还是有限度的,不能有限生成,经验值在 3000~5000 左右。
-XX:NewRatio=4: 设置年老代(包含 Eden 和两个 Survivor 区)与年轻代的比值(除去长久代)。设置为
4,则年老代与年轻代所占比值为 1:4,年老代占整个堆栈的 1 /5
-XX:SurvivorRatio=4:设置年老代中 Eden 区与 Survivor 区的大小比值。设置为 4,则两个 Survivor 区 与一个 Eden 区的比值为 2:4,一个 Survivor 区占整个年老代的 1 /6
-XX:MaxPermSize=16m: 设置长久代大小为 16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为 0 的话,则年老代对象不通过 Survivor
区,间接进入年轻代。对于年轻代比拟多的利用,能够提高效率。如果将此值设置为一个较大值,则年老代对
象会在 Survivor 区进行屡次复制,这样能够减少对象再年老代的存活工夫,减少在年老代即被回收的概率。
====Tomcat 中垃圾回收策略调优?
垃圾回收的设置在 catalina.sh 中,调整 JAVA_OPTS 变量。
具体设置如下:
JAVA_OPTS=”$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC –
XX:MaxGCPauseMillis=100″
具体的垃圾回收策略及相应策略的各项参数如下:
串行收集器(JDK1.5 以前次要的回收形式)
-XX:+UseSerialGC: 设置串行收集器
并行收集器(吞吐量优先)
示例:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC –
XX:MaxGCPauseMillis=100
-XX:+UseParallelGC:抉择垃圾收集器为并行收集器。此配置仅对年老代无效。即上述配置下,年老代使
用并发收集,而年轻代仍旧应用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最
好配置与处理器数目相等。
-XX:+UseParallelOldGC:配置年轻代垃圾收集形式为并行收集。JDK6.0 反对对年轻代并行收集
-XX:MaxGCPauseMillis=100: 设置每次年老代垃圾回收的最长工夫,如果无奈满足此工夫,JVM 会主动调
整年老代大小,以满足此值。
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会主动抉择年老代区大小和相应的 Survivor 区比例,以达到目标零碎规定的最低相应工夫或者收集频率等,此值倡议应用并行收集器时,始终 关上。
并发收集器(响应工夫优先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:设置年轻代为并发收集。测试中配置这个当前,-XX:NewRatio= 4 的配置失
效了,起因不明。所以,此时年老代大小最好用 -Xmn 设置。
-XX:+UseParNewGC: 设置年老代为并行收集。可与 CMS 收集同时应用。JDK5.0 以上,JVM 会依据系统配置
自行设置,所以无需再设置此值。
-XX:CMSFullGCsBeforeCompaction:因为并发收集器不对内存空间进行压缩、整顿,所以运行一段时间
当前会产生“碎片”,使得运行效率升高。此值设置运行多少次 GC 当前对内存空间进行压缩、整顿。
-XX:+UseCMSCompactAtFullCollection:关上对年轻代的压缩。可能会影响性能,然而能够打消碎片
====Tomcat 一个申请的残缺过程
配置如下:
Ng:(nginx)
upstream yy_001{
server 10.99.99.99:8080;
server 10.99.99.100:8080;
hash $**;
healthcheck_enabled;
healthcheck_delay 3000;
healthcheck_timeout 1000;
healthcheck_failcount 2;
healthcheck_send ‘GET /healthcheck.html HTTP/1.0’ ‘Host: wo.com’
‘Connection: close’;
}
server {
include base.conf;
server_name wo.de.tian;
…
location /yy/ {
proxy_pass http://yy_001;
}
首先 dns 解析 wo.de.tian 机器,个别是 ng 服务器 ip 地址
而后 ng 依据 server 的配置,寻找门路为 yy/ 的机器列表,ip 和端口
最初 抉择其中一台机器进行拜访—-> 上面为具体过程
1) 申请被发送到本机端口 8080,被在那里侦听的 Coyote HTTP/1.1 Connector 取得
2) Connector 把该申请交给它所在的 Service 的 Engine 来解决,并期待来自 Engine 的回应
3) Engine 取得申请 localhost/yy/index.jsp,匹配它所领有的所有虚拟主机 Host
4) Engine 匹配到名为 localhost 的 Host(即便匹配不到也把申请交给该 Host 解决,因为该 Host 被定义为该 Engine 的默认主机)
5) localhost Host 取得申请 /yy/index.jsp,匹配它所领有的所有 Context
6) Host 匹配到门路为 /yy 的 Context(如果匹配不到就把该申请交给路径名为”“的 Context 去解决)
7) path=”/yy”的 Context 取得申请 /index.jsp,在它的 mapping table 中寻找对应的 servlet
8) Context 匹配到 URL PATTERN 为 *.jsp 的 servlet,对应于 JspServlet 类
9) 结构 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用 JspServlet 的 doGet
或 doPost 办法
10)Context 把执行完了之后的 HttpServletResponse 对象返回给 Host
11)Host 把 HttpServletResponse 对象返回给 Engine
12)Engine 把 HttpServletResponse 对象返回给 Connector
13)Connector 把 HttpServletResponse 对象返回给客户 browser
更多面试题或学习资源可查看我主页或评论获取