本人一直开发安卓,头一次搭服务器~于是第一次倒腾centos。
于是就买了个最新的centos7.2的云主机,然后再加个Tomcat8搭建一个最最最基本的javaweb运行环境。
按照网上所有教程,一字不落的把环境搭起来了。
./startup.sh之后,就访问我的主页xxx.xxx.xxx.xxx:8080,我就看到 那个网页那个小圈一直再转啊,再转啊,快的能转五六分钟,慢的能转十几分钟都不能打开tomcat的默认页面 ,我就以为我的环境搭错了,重装系统,重新配置无数遍,也不好用。很崩溃。。。期间心酸不婊。
然后我使用下面的 [0x5]解决问题 B方法结局的问题。

最后终于找到如下原因,自己看吧,分享一下,希望新人别像我这样悲催的被折磨了一天一夜。
出处:https://webcache.googleusercontent.com/search?q=cache:C4oiQwHJY4EJ:https://hacpai.com/article/1479778148182%3Fp%3D1%26m%3D0+&cd=7&hl=en&ct=clnk&gl=jp
============以下内容引自如上连接的内容=====================================
CentOS7 下安装 Tomcat8 并且解决启动速度巨慢的问题
[0x0]介绍 Tomcat 的安装本身并没有什么复杂性,但是在启动的时候巨慢,运气不好卡个 3-5 分钟,所以这篇文章主要是为了记录解决巨慢的问题。
[0x1]环境介绍



  • CentOS7.0_x86-64
  • JDK1.8

[0x2]下载 Tomcat 的升级非常快,现在维持更新的有 7.x,8.0.x,8.5.x 和 9.x,每个版本对 JDK 的要求不一样,需要自己根据自己当时 JDK 环境选择不同的 Tomcat 版本。
我的服务器目前选择的是 Tomcat.8.0.38,要求 JDK7 以上,那么就下载吧,同样我已经下载好并且上传到微云了,有需要的可以直接下载。
[0x3]安装 & 启动
安装:Tomcat 的安装其实就是解压到一个目录就表示安装完成了。下面就是解压的命令。
[web@ebs-29770 ~]$ tar -zxf tomcat8.0.38-base.tar.gz 启动:进入刚刚解压的 Tomcat 目录,然后在进入 bin 目录,执行如下命令:
[web@ebs-29770 bin]$ ./startup.sh 下面是启动日志
[web@ebs-29770 tomcat8.0.38]$ ./bin/startup.shUsing CATALINA_BASE: /home/web/tomcat8.0.38Using CATALINA_HOME: /home/web/tomcat8.0.38Using CATALINA_TMPDIR: /home/web/tomcat8.0.38/tempusing JRE_HOME: /apps/java/jdk/jdk1.8.0_112/jreUsing CLAsspATH: /home/web/tomcat8.0.38/bin/bootstrap.jar:/home/web/tomcat8.0.38/bin/tomcat-juli.jarTomcat started.[web@ebs-29770 tomcat8.0.38]$ tail -f logs/catalina.out14-Nov-2016 23:15:37.559 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argumenttemp14-Nov-2016 23:15:37.560 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/am14-Nov-2016 23:15:37.781 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]14-Nov-2016 23:15:37.803 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared14-Nov-2016 23:15:37.809 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]14-Nov-2016 23:15:37.811 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared14-Nov-2016 23:15:37.815 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 902 m14-Nov-2016 23:15:37.866 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Cat14-Nov-2016 23:15:37.866 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engi14-Nov-2016 23:15:37.878 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Dep/tomcat8.0.38/webapps/ROOT14-Nov-2016 23:20:42.357 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecu for session ID generation using [SHA1PRNG] took [303,955] milliseconds.14-Nov-2016 23:20:42.389 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Dep/web/tomcat8.0.38/webapps/ROOT has finished in 304,510 ms14-Nov-2016 23:20:42.393 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]14-Nov-2016 23:20:42.400 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]14-Nov-2016 23:20:42.402 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 304587 ms
[0x4]启动巨慢问题分析 上面的 Tomcat 是刚下载解压出来的默认配置(只保留 Tomcat 自带),但根据上面的启动日志,竟然花了 3 分多钟,然后仔细观察日志,主要是卡在初始化 Session。开始我以为云服务器的问题,然后我在本地虚拟机上同样操作,问题重现,并且更换了 Tomcat7,问题仍然出现,所以。通过搜索和分析,Tomcat 的 SessionID 是通过 SHA1PRNG 算法计算得到的,SHA1 算法需要一个密钥,这个密钥在 Tomcat 启动的时候随机生成一个,生成是使用了 Linux 随机函数生成器/dev/random。读取它相当于生成随机数字。搜索/dev/random,大概知道是什么鬼了:/dev/random会根据 噪音 产生随机数,如果 不够它就会阻塞。Linux 是通过 I/O,键盘终端、内存使用量、cpu 利用率等方式来收集 的,如果 不够生成随机数的时候就会被 阻塞
[0x5]解决问题 解决上述问题有两个方案,一个使用伪随机函数生成器,另外一个加大/dev/random的熵池,下面分别介绍这两种方案。
A.使用伪随机函数生成器/dev/unrandom /dev/urandom并不是真正的随机行为(其实一般不容易重复),主要有两个地方可以修改。


  • 通过修改 Tomcat 启动文件 -Djava.security.egd=file:/dev/urandom
  • 通过修改 JRE 中的 java.security 文件 securerandom.source=file:/dev/urandom
B.增大/dev/random的熵池(推荐) 问题的原因是由于熵池不够大,所以增大它是最彻底的方法。我们可以通过软件的方法实现,下面是软件的安装和配置流程。


  • 安装熵服务
    yum install rng-tools
  • 启动熵服务
    systemctl start rngd
  • 如果你的 cpu 不支持 DRNG 特性或者像我一样使用虚拟机,可以使用/dev/unrandom来模拟。
    cp /usr/lib/systemd/system/rngd.service /etc/systemd/system vim /etc/systemd/system/rngd.service#以下是编辑内容ExecStart=/sbin/rngd -f -r /dev/urandom
  • 重新载入服务
    systemctl daemon-reloadsystemctl restart rngd
经过上面的修改,我们再观察 /proc/sys/kernel/random/entropy_avail 基本上在 3000 左右。这个时候重新启动 Tomcat,发现启动时间正常。
[0x6]总结 上面的 Tomcat 启动问题还是比较少见的,所以有时候不好找,所以专门做个笔记记录下。

centos下面tomcat启动非常慢的更多相关文章

  1. iOS推送通知适用于Dev而不是Enterprise Distribution

    本网站上没有其他问题,我已经能够找到实际上提出了Dev将工作的原因,但企业分布不会.为什么归档总是使aps环境生产?

  2. ios – 为什么Web Inspector向我显示“无检查应用程序”?

    什么可能是一个可能的原因,什么可以解决?解决方法我有同样的问题,这是因为我正在运行iOS8,通过将Safari更新到7.1来修复.

  3. IOs Cordova长按显示文本选择放大镜即使禁用文本选择,如何删除?

    是否有任何可能导致此问题的插件?任何帮助深表感谢.Cordova插件:>com.mbppower.camerapreview>cordova-plugin-statusbar>cordova-plugin-whitelist>离子插件键盘>org.apache.cordova.camera>org.apache.cordova.console>org.apache.cordova.device>org.apache.cordova.dialogs>org.apache.cordova.file>org.a

  4. ios – testflight库和Xcode 5没有变化现在说“ld:找不到-lTestFlight的库”

    我已经创建了几个月的应用程序,突然Xcode5不想构建它.它只是抱怨以下错误.如果我理解它可以,它会抱怨testflight,但我几周没有改变它.它完美地编译了它.我不得不说我已经尝试将AdobeADMS跟踪库添加到项目中.然后,出现链接器错误.任何提示?

  5. 如何在ios swift项目中为dev n prod使用两个不同的GoogleService-info.plist文件?

    我需要使用两个不同的GoogleService-info.plist来处理dev和prod构建,目前我只是通过在编辑方案中更改“构建配置”来分离dev和prod,但现在我需要有两个不同的.plist文件dev和prod用于处理谷歌分析,pushwoosh等,解决方法对于这种情况,您需要在Dev和Prod的项目中使用带有diffbundleid的不同Targets.之后,您可以链接GoogleSer

  6. Swift项目的main函数为何消失了?如何把它找出来?

    如果在app启动时放置断点,可以看到应用程序调用栈,如下图main函数作为程序启动后的第二个函数被调用,然后在main函数中再启动UIApplication,并绑定AppDelegateSwift项目中的main函数为何隐藏创建过Swift项目的童鞋应该会发现,项目中没有一个名为main.swift的文件,为什么app的入口没有了?swift中main函数的Process.unsafeArgv参数变成了一串十六进制数字,应该也是代表应用程序地址。

  7. openstack安装liberty--安装对象存储服务swift

    通常使用CACHE技術提高性能Accountservers賬戶服務,管理對象存儲中的賬戶定義。Containerservers容器服務,在對象存儲中管理容器或文件夾映……Objectservers對象服務,在存儲節點管理實際的對象,比如文件。Wsgimiddleware處理認證,通常使用OPENSTACKIdentityswiftclient為用戶提供命令行接口使用RESTAPIswift-init初始化和構建RING文件腳本swift-recon一個命令行工具,用於檢索群集的各種度量和測試信息。

  8. Swift中方法(method)所谓的lazy绑定简介

    我们知道在ruby之类的动态语言中对象方法可以先从类中预先抽取,然后再应用到某个具体对象上.这称为无绑定的method对象,也可以叫做lazy绑定.下面举个例子:以上在ruby中创建了一个类A,我们可以用它的实例调用test方法:我们也可以先创建一个无绑定的method,然后绑定到特定的实例上去:最后一句是倒数第二句的语法糖,效果是一样的.那么如果是类方法呢?那更简单了,直接用Obj.method()即可:无论你承认与否,ruby比swift还要简洁,更具有美感!

  9. Swift Web 开发之 Vapor - 入门一

    简介Vapor是一个基于纯Swift构建出的Web开发框架,目前可以运行在macOS和Ubuntu,用于构建出漂亮易用的网站或者API服务。组件VaporAuthSessionsCookiesRoutingVaporToolBoxFluentEngineHTTPURIWebSocketsSMTPLeafJSONConsoleTLSCryptoNodeSocksVapor使用SwiftPackageManager做依赖和包管理,不过以我个人目前的使用感受来看SwiftPackageManager还不是很好用

  10. Swift Web 开发之 Vapor - 模版 Leaf三

    Leaf作为Vapor官方提供的组件之一原生集成在Vapor中,Leaf模版文件以.leaf结尾,模版语法夹杂在HTML之间,我们可以直接使用而不需要引入其他外部依赖。#import()用来声明一个插入点在当前模版。这是[SwiftWeb开发之Vapor]系列的第三篇,说了说Vapor中自带的Leaf模版引擎,按照笔者目前的使用情况来看其实Leaf还不太成熟,虽然还有太多需要优化改进的地方,不过我相信之后一定会越来越好的。所以不要害怕,赶紧来写SwiftServerSide吧!

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部