本文主要解决三个问题,第一个是在Linux下移除系统自带的JDK环境,换成自己配置的java环境;第二个是在linux下启动tomcat非常慢,即使是一个很高性能的服务器也有此现象;第二个问题是在linux下修改JVM虚拟机内存配置问题。


1、Linux下移除系统自带JDK环境

        在一次成长的经历中,领导安排笔者负责一个项目,快要上线时,让笔者跟公司运维调配资源,然后笔者根据业务需求和实际测试估算申请了一台内存64G的Linux服务器,连接上之后,运行 java -version,显示JavaVersion是1.8.0.161,笔者不想要这个版本的JDK,然后想换一个1.8.0.151版本的JDK,因为这样就和测试环境一模一样了,所以笔者就自己又重新安装了151版本的JDK,没有动它自带的,然后在/etc/profile文件做了配置,再次运行java -version 命令,发现还是之前的161,这就不合我意了,我用你服务器,连自己控制JDK的权利都没有的吗?笔者可是一个倔强的人,那既然你不想让我用自己的JDK,我只能把你的移除了,于是有了下面的方法:

        先查询自带open jdk的信息,命令如下:

rpm -qa | grep jdk

        接下来卸载自带jdk,命令如下:

rpm -e --nodeps java 查到的jdk名

        根据上述命令把查到的open jdk一个个都删掉,最后在用java -version查一遍,发现查不到Java版本了,就说明卸载干净了,可以安装自己的jdk了。



2、在Linux下tomcat启动非常慢

        继续上面的经历,项目的测试环境是一台32G内存的windows服务器,在测试时,将项目部署到windows服务器的tomcat8下,项目用几十秒起来了,然后就是正常的一通测试,服务器申请下来后,我要搭建正式环境,将jdk配置好,将同样的tomcat安装好,然后将项目包部署进去,启动,发现启动到后面就卡住了,每次都这样,一直等到最后是启动起来了,但是耗时竟然几百秒,这怎么能行,性能高的服务器竟然不如性能低的服务器,这部署一次谁能受得了,即使是不经常部署偶尔也不行啊,面子上挂不住(笔者还是一个要面子的人啊,脸皮儿簿,连个对象都找不到哈哈),于是有了下面的解决办法:

        在%JAVA_HOME%/jre/lib/security目录下找到java.security这个文件,用vim命令打开这个文件,找到下面的内容:

securerandom.source=file:/dev/random

将其替换成:

securerandom.source=file:/dev/urandom

        random和urandom是Linux提供的随机伪设备,提供用不为空的随机字节数据流,许多加解密程序需要他们提供随机数,他们的区别在于random依赖于系统中断,因此在系统中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会就进入等待状态,直到系统的中断数充分够用,这也就是tomcat启动变慢的原因,而urandom不依赖与系统的中断,也就不会造成这种阻塞等待。



3、修改JVM虚拟机内存配置

        在测试过程中,由于数据量太大,在数据量下载达到千万级别时,默认的内存不够,导致内存溢出,程序卡死,所以得修改堆内存配置,在Linux环境下找到Tomcat安装位置,找到tomcat/bin目录下的catalina.sh文件,在cygwin=false上面配置如下:

JAVA_OPTS="-Xms1024m -Xmx16384m -XX:MataspaceSize=512M -XX:MaxMataspaceSize=512M"

        在windows环境下配置,同样找到tomcat目录下bin目录下的catalina.bat文件,编辑,找到setlocal上面写如下配置:

set JAVA_OPTS=-Xms1024m -Xmx16384m XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

        故事讲完了,做个笔记记录一下经历过的一些问题,解决问题的过程就是成长的过程。