V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
uxstone
V2EX  ›  问与答

遇到怪事了

  •  
  •   uxstone · 2016-02-17 14:31:00 +08:00 · 9096 次点击
    这是一个创建于 2984 天前的主题,其中的信息可能已经有所发展或是发生改变。

    digitalocean 部署 tomcat
    终端显示启动成功,但无法访问 tomcat 首页,
    关闭时遇到

    Feb 17, 2016 1:29:34 AM org.apache.catalina.startup.Catalina stopServer
    SEVERE: Could not contact localhost:8005. Tomcat may not be running.
    Feb 17, 2016 1:29:34 AM org.apache.catalina.startup.Catalina stopServer
    SEVERE: Catalina.stop:
    java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:476)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:408)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:497)

    不能访问 tomcat 首页了....
    同样的设置在本地就可以,
    为这事把 VPS 重装了系统,只装了 jdk 和 tomcat,环境变量也配了
    有谁遇到过吗?

    26 条回复    2016-02-18 16:17:09 +08:00
    hcymk2
        1
    hcymk2  
       2016-02-17 14:44:43 +08:00
    先 ps 看下 tomcat 的那个进程在不在,估计是不在了。
    如果在直接 kill ,之后再 startup 。
    之后在 vps 上 curl 下 tomcat 的首页。
    hcymk2
        2
    hcymk2  
       2016-02-17 14:47:21 +08:00
    还有能贴下启动的日志么?我觉得是没启动成功。
    uxstone
        3
    uxstone  
    OP
       2016-02-17 14:57:16 +08:00
    @hcymk2
    uxstone@ux1:~/tomcat/bin$ ./startup.sh
    Using CATALINA_BASE: /home/uxstone/tomcat
    Using CATALINA_HOME: /home/uxstone/tomcat
    Using CATALINA_TMPDIR: /home/uxstone/tomcat/temp
    Using JRE_HOME: /usr/lib/jvm/jdk1.8.0_73/jre
    Using CLASSPATH: /home/uxstone/tomcat/bin/bootstrap.jar:/home/uxstone/tomcat/bin/tomcat-juli.jar
    Tomcat started.
    uxstone
        4
    uxstone  
    OP
       2016-02-17 14:59:36 +08:00
    @hcymk2
    执行了 curl -X GET http://127.0.0.1:8080
    光标一直闪,没反应.
    hcymk2
        5
    hcymk2  
       2016-02-17 14:59:54 +08:00
    @uxstone
    说错了 是贴下启动时 catalina.out 的内容。
    hcymk2
        7
    hcymk2  
       2016-02-17 15:13:42 +08:00
    @uxstone
    私有的啊。。。。
    uxstone
        8
    uxstone  
    OP
       2016-02-17 15:18:39 +08:00
    kingwrcy
        9
    kingwrcy  
       2016-02-17 15:20:56 +08:00
    java.net.BindException: Address already in use

    8080 被用了吧?换个端口?
    hcymk2
        10
    hcymk2  
       2016-02-17 15:22:39 +08:00
    @uxstone
    ["http-nio-8080"]
    17-Feb-2016 01:32:35.845 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-nio-8080"]
    java.net.BindException: Address already in use
    看到了


    先改下端口吧 ajp 如果不用可以先注释掉。
    uxstone
        11
    uxstone  
    OP
       2016-02-17 15:26:51 +08:00
    @hcymk2 @kingwrcy
    把 8080 改成 8081,还是不能用,
    我都把 VPS 系统重装了,
    只安装了 JDK 和 tomcat ,
    hcymk2
        12
    hcymk2  
       2016-02-17 15:34:11 +08:00
    那你看下 vps 上现在有进程在 8080 端口么?
    uxstone
        13
    uxstone  
    OP
       2016-02-17 15:44:14 +08:00
    @hcymk2
    lsof -i:8080
    netstart -ap |grep 8080

    都没有发现占用 8080
    hcymk2
        14
    hcymk2  
       2016-02-17 15:48:18 +08:00
    你远程直接 telnet 你的 vps 的 8080 这可真是怪了。
    uxstone
        15
    uxstone  
    OP
       2016-02-17 15:48:58 +08:00
    @hcymk2
    执行./shutdown.sh
    不能关闭 tomcat
    显示
    SEVERE: Could not contact localhost:8005. Tomcat may not be running.

    但我看 tomcat 又的确是运行的
    hcymk2
        16
    hcymk2  
       2016-02-17 16:02:11 +08:00
    不是的那个只是进程在。但是 Server 都没起起来, Connector 当然没有创建。
    所以是访问不了首页的。
    你远程 telnet vpsip:8080 有什么结果?
    magicsilence
        17
    magicsilence  
       2016-02-17 16:05:02 +08:00
    1. 杀进程, kill -9
    2. 改端口, 不只是 8080 ,还有其他的。
    3. 重启
    uxstone
        18
    uxstone  
    OP
       2016-02-17 16:05:13 +08:00
    @hcymk2
    telnet: could not resolve 104.236.174.176:8080/telnet: Name or service not known
    hcymk2
        19
    hcymk2  
       2016-02-17 16:10:27 +08:00
    错了 是 telnet 104.236.174.176 8080
    我可以打开了
    uxstone
        20
    uxstone  
    OP
       2016-02-17 16:18:09 +08:00
    @hcymk2

    刚才弄好了,不是端口问题,现在可以访问了
    是 jdk 的一个 bug

    找到 jdk1.x.x_xx/jre/lib/security/java.security 这个文件

    把 securerandom.source 设置成
    securerandom.source=file:/dev/./urandom

    具体的请参考这篇博客(非本人的博客,只是引用一下):
    http://blog.csdn.net/njchenyi/article/details/46641141



    从百度上搜到的,问题和我一样,想在 digitalocean 上撘 tomcat 失败,

    早上 google 到了 /dev/./urandom
    但全英文,没看懂. 就略过了 (英文还是很重要的)

    我怕有莫名其妙的的端口占用,都把系统重装了,
    被这问题倒腾了一天
    hcymk2
        21
    hcymk2  
       2016-02-17 16:26:25 +08:00
    uxstone
        22
    uxstone  
    OP
       2016-02-17 16:35:19 +08:00
    @hcymk2
    没看懂.
    uxstone
        23
    uxstone  
    OP
       2016-02-17 17:18:52 +08:00
    @hcymk2
    我仔细想了想,这也不算是 bug,

    我在 digitalocean 买的是最低配置的 vps,内存只有 512M
    而本机是 8G 内存,阿里云上是 1G 内存都能运行 tomcat

    所以唯一有差别的就是内存这块了

    这可能是 jvm 根据系统内存在某个方面的设置导致了我不能运行 tomcat
    ttw789
        24
    ttw789  
       2016-02-17 17:27:01 +08:00
    同样的問题我遇見過,
    也是 digitalocean ;

    把進程 kill 掉,
    以 root 用户 或 sudo 启動 tomcat 就好了;

    --
    之前查了好久, 最後忘記在哪看到的了,
    好像是 digitalocean 的什么限制之類的原因
    uxstone
        25
    uxstone  
    OP
       2016-02-17 17:45:16 +08:00
    @ttw789
    不一样,这跟权限应该没什么关系.
    我又试了一下,以 root 用户启动 tomcat 还是会遇到上面的问题,
    启动能启动,
    但关闭时提示 SEVERE: Could not contact localhost:8005. Tomcat may not be running.

    因为本机和 VPS 都是 ubuntu 的,还特意把内核也设置一样的.
    都无法运行,把 jdk 里的文件一改就能运行了.

    多半还是因为内存太小了.
    ttw789
        26
    ttw789  
       2016-02-18 16:17:09 +08:00
    @uxstone 有可能吧,
    我操作系統是 debian
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1222 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:57 · PVG 01:57 · LAX 10:57 · JFK 13:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.