今天在 linux 下安装了 tomcat,中间也是一路波折,最终安装好了。感觉应该有不少伙伴跟我一样都会踩到这些坑,打算记录下来。使用的是通用(ubantu,debian, centos 均可)的安装方式,安装也可以灵活一点。

下载

打开链接

https://tomcat.apache.org/download-80.cgi

选择如下的方式进行下载

我下载的是这个版本:apache-tomcat-8.5.28.tar.gz

安装

step1 解压

tar -zvxf apache-tomcat-8.5.28.tar.gz

解压完之后,得到【apache-tomcat-8.5.28/】这个文件夹。

step2 移动文件夹

mv apache-tomcat-8.5.28/ /opt/apache-tomcat-8.5.28

step3 创建连接

ln -s apache-tomcat-8.5.28/ tomcat8

此时已经安装完毕了,现在可以启动测试一下。

测试

step1 启动

/opt/tomcat8/bin/startup.sh

step2 测试

http://ip:8080/

将以上的ip换成你自己机器的ip,如:本地访问则是 127.0.0.1 或 localhost。

注意:如果久未反应,则等待一段时间在试。(此处是我遇到的问题,待会说明)

OK, 如果不出意外的话此时应该可以出现以下的页面了。如果没成功就要检查自己的安装步骤,JDK/JRE 的安装路径等问题了。

开机自启动

  1. 打开 /etc/rc.local 文件

vim /etc/rc.local

该文件是给用户自定义启动时需要执行的文件。

  1. 添加 tomcat 路径

/opt/tomcat8/bin/startup.sh

在 exit 0 之前添加。

至此,安装基本已经结束了,但有一个启动慢的问题需要解决。

tomcat启动慢问题

问题

这个问题是我在启动时访问 http://ip:8080/ 没反应,于是我就想着去关闭,但发现关闭不了,甚是奇怪。当时的报错情况是这样子的:

但是,我在访问启动页面时,过了很久再次访问,差不多有两分钟吧,页面还是访问成功了。所以,以上的问题应该就是 tomcat 没有完全启动就去关闭,当然就关闭不了了。

解决方法

解决的方法也简单,去网上搜了一下:

  1. 打开 java 配置文件 java.security

文件路径: $JAVA_HOME/lib/security/java.security

如果不知道你的 JDK/JRE 安装路径,就使用一下的命令进行查询。

echo $JAVA_HOME

  1. 搜索 securerandom,找到一下信息,并将其修改
securerandom.source=file:/dev/urandom或securerandom.source=file:/dev/random
改为
securerandom.source=file:/dev/./random
  1. 保存,退出

  2. 启动 tomcat,速度就上来了。

原因(抄的)

Tomcat 7/8 都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类SecureRandom的实例作为会话ID,这里花去了62秒,也即接近1分钟,当然有时花费时间更长,达到5-10分钟。

SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。

在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。

1)如果Java.security.egd属性或securerandom.source属性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。

2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。

这就是为什么我们设置值为”file:///dev/urandom”或者值为”file:/./dev/random”都会起作用的原因。

在这个实现中,产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非 常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。

当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

那么什么是环境噪声?

随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

linux下tomcat 8的安装以及tomcat启动慢问题的更多相关文章

  1. Linux下apache+phppgadmin+postgresql安装配置

    Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...

  2. Linux下的网络远程安装

    Linux下的网络远程安装 1.用RHEL6.5光盘安装第一台服务器 2.在第一台服务器上配置YUM服务器 先创建一个挂载 #mount #umount /dev/cdrom #mkdir /mnt/ ...

  3. Linux下指定版本编译安装LAMP

    说明: 操作系统:CentOS 6.5 64位 需求: 编译安装LAMP运行环境 各软件版本如下: MySQL:mysql-5.1.73 Apache:httpd-2.2.31 PHP:php-5.2 ...

  4. 【转】Linux下XenServer管理工具安装

    转载文章 - Linux下XenServer管理工具安装 Xen-Server 6.5 虚拟机安装Linux系统 vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) ...

  5. linux下.run文件的安装与卸载

    linux下.run文件的安装与卸载   .run文件的安装很简单,只需要为该文件增加可执行属性,即可执行安装 以 virtualbox 的安装文件 virtualbox-3.1.6-59338-Li ...

  6. Linux下rar unrar的安装

    Linux下rar unrar的安装: 以3.8.0版本为例,如果是64位平台,执行以下命令,也可以去官方网站:)下载最新版: wget http://www.rarlab.com/rar/rarli ...

  7. 【转】Linux下Android ADB驱动安装详解

    原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比 ...

  8. Linux下的Oracle 11gr2安装完成的的自启动操作。

    Linux下的Oracle在安装结束后是处于运行状态的.重启机器后,Oracle不会像在Windows下那样将Oracle添加到Windows服务,在linux下需要手动启动Orcle服务 以orac ...

  9. Linux下查看MySQL的安装路径

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root               ?        :: /bin/sh /usr/ ...

  10. ACE-6.1.0 linux 下的编译与安装步骤

    ACE-6.1.0 linux 下的编译与安装步骤  引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从  ...

随机推荐

  1. spring boot 使用java9上传到github其他人clone后报错

    错误原因: Java.lang.NoClassDefFoundError:javax/xml/bind/JAXBException jdk9存在版本兼容问题. 经过查找资料发现问题所在 大致意思是ja ...

  2. 解决CXF的java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-extension-soap.xml] cannot be opened because it does not exist

    以下是错误信息 九月 25, 2017 8:22:04 下午 org.springframework.web.context.support.XmlWebApplicationContext prep ...

  3. 用原生js实现一个new方法

    首先写一个父类方法(包含参数name,age): function Person(name,age){ this.name = name; this.age = age; } new一个Person的 ...

  4. 使用MyBatis集成阿里巴巴druid连接池(不使用spring)

    在工作中发现mybatis默认的连接池POOLED,运行时间长了会报莫名其妙的连接失败错误.因此采用阿里巴巴的Druid数据源(码云链接 ,中文文档链接). mybatis更多数据源参考博客链接 . ...

  5. NTP 时间同步协议

    http://www.faqs.org/rfcs/rfc1305.html port:123

  6. 中小研发团队架构实践之微服务MSA

    一.MSA简介 1.1.MSA是什么 微服务架构MSA是Microservice Architecture的简称,它是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相通讯.互相配合, ...

  7. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)

    前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...

  8. Effective Java 第三版——34. 使用枚举类型替代整型常量

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  9. Hama安装及示例运行

    Hama介绍 Apache Hama是一个纯BSP(Bulk Synchronous Parallel)计算框架,模仿了Google的Pregel.用来处理大规模的科学计算,特别是矩阵和图计算. BS ...

  10. java代码中init method和destroy method的三种使用方式

    在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. ...