Java面试手册
目录
一、 性能优化面试专栏 1.1、 tomcat性能优化整理 1.2、 JVM性能优化整理 1.3、 Mysql性能优化整理 二、 微服务架构面试专栏 2.1、 SpringCloud面试整理 2.2、 SpringBoot面试整理 2.3、 Dubbo面试整理 三、 并发编程高级面试专栏 四、 开源框架面试题专栏 4.1、 Spring面试整理 4.2、 SpringMVC面试整理 4.3、 MyBatis面试整理 五、 分布式面试专栏 5.1、分布式限流面试整理
5.2、 分布式通讯面试整理 5.3、 分布式数据库面试整理
正文
一、性能优化专栏
1.1、tomcat性能优化整理
1、你怎样给tomcat调优
1. JVM参数调优:-Xms
示JVM堆的最大值。这两个值的大小一般根据需要进行设 置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出, 并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大 值的80%。在
catalina.bat 中,设置 JAVA_0PTS='-Xms256m- Xmx512m,,表示初始化内存为256MB,可以使用的最大内存为512MB。 2. 禁用DNS查询
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或 者通过域名服务器查找机器名转换为IP地址°DNS查询需要占用网络,并 且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP 的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可 以关闭DNS查询,方式是修改server.xml文件中的enableLookups参
数值:
Tomcat4
className=Horg.apache.coyote.tomcat4.CoyoteConnectorHport=H80H minProcessors=\ctPort=\ acceptCount=%useURIValidationHack=HfalseHdisableUploadTimeout=HtrueH/> Tomcat5 通过应用程序的连接器(Con nector)进行性能控制的的参数是创建的 处理请求的线程数。Tomcat使用线程池加速响应速度来处理请求。在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关 的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序 员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接更多的 请求。 Tomcat4中可以通过修改minProcessors和maxProcessors的值来控 制 线程数。这些值在安装后就已经设定为默认值并且是足够使用的,但是 随着站点的扩容而改大这些值。minProcessors服务器启动时创建的处 理请求的线程数应该足够处理一个小量的负载。也就是说,如果一天内每 秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置 线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程 数,指定为参数maxProcessors的值。maxProcessors的值也是有上 限的,应防止流量不可控制(或者恶意的服务攻击),从而导致超出了虚 拟机使用内存的大小。如果要加大并发连接数,应同时加大这两个参 数。web server允许的最大连接数还受制于操作系统的内核参数设置, 通常Windows是2000个左右,Linux是1000个左右。 在Tomcat5对这些参数进行了调整,请看下面属性: maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示 Tomcat可创建的最大的线程数。 acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可 以 放到处理队列中的请求数,超过这个数的请求将不予处理。 connnection Timeout网络连接超时,单位:毫秒。设置为0表示永不 超 时,这样设置有隐患的。通常可设置为30000毫秒。 minSpareThreadsTomcat初始化时创建的线程数。 maxSpareThreads 一旦创建的线程超过这个值,Tomcat就会关闭不再 需要的socket线程。 最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。 在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是 所有人的web站点的流量都是一样的,因此没有一刀切的方案来确定线程 数的值。 2、如何加大comcat连接数 在 tomcat 配置文件 server.xml 中的〈Connector/〉 配置中,和连接数相关的参数有: minProcessors :最小空闲连接线程数,用于提高系统处理性能,默认 值 为10 maxProcessors :最大连接线程数,即:并发处理的最大请求数,默认 值 为75 acceptCount :允许的最大连接数,应大于等于maxProcessors,默 认值 为100 enableLookups :是否反查域名,取值为:true或false。为了提高处理能 力,应设置为false connectionTimeout :网络连接超时,单位:毫秒。设置为0表示永不 超 时,这样设置有隐患的。通常可设置为30000毫秒。 其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加 大并发连接数,应同时加大这两个参数。 web server允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows是2000个左右,Linux是1000个左右。tomcat5中的配置示例: maxThreads=\minSpareThreads=\maxSpareThreads=\enableLookups=\redirectPort=\acceptCount=\ debug=H0HconnectionTimeout=H20000H disableUploadTimeout=HtrueH/> 对于其他端口的侦听配置,以此类推。 3、怎样加大tomcat的内存 首先检查程序有没有限入死循环 这个问题主要还是由这个问题java.lang.OutOfMemoryError:Java heap space 引起的。第一次出现这样的的问题以后,引发了其他的问题。在网上一查 可能是JAVA的堆栈设置太小的原因。 跟据网上的答案大致有这两种解决方法: 1、 设置环境变量 解决方法:手动设置Heap size 修改 TOMCAT_HOME/bin/catalina.sh setJAVA_0PTS=-Xms32m-Xmx512m 可以根据自己机器的内存进行更改。 2、 java-Xms32m-Xmx800m className 就是在执行JAVA类文件时加上这个参数,其中className 是需要执行的确 类名。(包括包名)这个解决问题了。而且执行的速度比 没有设置的时候快很多。如果在测试的时候可能会用Eclisp e这时候就需要 在 Eclipse->run-arguments 中的 VM arguments 中输入-Xms32m- Xmx800m 这个参数就可以了。 后来在Eclilpse中修改了启动参数,在VMarguments 加入了 -Xms32m-Xmx800m,问题解决。 一、java.lang.OutOfMemoryError:PermGen space PermGen space 的全称是 Permanent Generation space,是指内存的 永 久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被 放到PermGen space中,它和存放类实例(Instance)的Heap区域不 同,GC(Garbage Collection)不会在主程序运行期对 PermGen space 进行清理,所以如果你的应用中有很多CLASS的话, 就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进 行preco mpile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了 jvm默认的大小(4M)那么就会产生此错误信息了。