• 【部署之后的错误排查】远程不能访问


    项目不能远程访问的原因分析

    1. 首先判断项目是否启动成功

      可以根据端口号、进程名等查看

    2. 看内网是否能访问

      curl localhost:8161
      
      • 1
    3. 判断项目是否开启远程访问,很多项目都只是开通了127.0.0.1地址,只有内网能访问。一般我们通过修改配置文件做到。

      # 这种只能被内网访问
      [root@VM-0-14-centos bin]# netstat -tunlp|grep 8161
      tcp6       0      0 127.0.0.1:8161          :::*                    LISTEN      24120/java
      # 这种可以被外网访问
      [root@VM-0-14-centos bin]# netstat -tunlp|grep 8161
      tcp6       0      0 :::8161                 :::*                    LISTEN      11658/java
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      # 如果没有出现 "::" 很多时候,你需要注释项目配置文件中的类似于这样的配置文件:
      <property name="host" value="127.0.0.1"/> # activemq jetty.xml
      bind 127.0.0.1 -::1 #redis.conf
      
      • 1
      • 2
      • 3
    4. 看是否是网络问题

      ping IP地址
      
      • 1
    5. 看安全策略

      telnet IP地址 端口
      # 如果不通,我们则需要去云服务器的控制台查看安全策略
      
      • 1
      • 2

    附录:查看进程是否启动

    根据端口号查询

    netstat -tunlp | grep <端口号>

    netstat -tunlp | grep <端口号>
    
    • 1
    • | grep <端口号> 是管道加过滤条件。就拿80举例,比如说查询出来的数据行有10条,包含“80”的行有3行(80可能是端口号,也可能是端口号的一部分,或者进程号的一部分),那么就只会显示3行。
    • 关键在于 -tunlp 。这个不是一个条件,其实是5个条件 t u n l p
    • l => listening 显示所有正在监听的端口,ltu => udp listening && tcp listening 即显示所有正在监听的tcp与udp端口
    • p => process 则不是查询条件,而是显示内容,会显示进程号信息(注意,这个还和账号权限有关哦,如果没有权限是无法显示的)
    • n => 显示ip以及端口,这个必须用到,因为我们是根据端口做筛选的
    [root@VM-0-14-centos bin]# netstat -tunlp|grep 8161
    tcp6       0      0 :::8161                 :::*                    LISTEN      11658/java
    # 注意这个"::",它表示可以被外界访问
    # 如果没有出现 "::" 很多时候,你需要注释项目配置文件中的类似于这样的配置文件:
    <property name="host" value="127.0.0.1"/> # activemq jetty.xml
    bind 127.0.0.1 -::1 #redis.conf
    
    # 不注释的效果
    [root@VM-0-14-centos bin]# netstat -tunlp|grep 8161
    tcp6       0      0 127.0.0.1:8161          :::*                    LISTEN      24120/java
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    lsof -i:端口号

    lsof -i:8161
    # => ls + of 
    # => list open files 列出被各种进程打开的文件信息
    # => lsof -i 显示所有打开8161端口的进程(在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件)
    
    • 1
    • 2
    • 3
    • 4
    # 仅内网访问时
    [root@VM-0-14-centos bin]# lsof -i:8161
    COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
    java    24120 root  161u  IPv6 457048659      0t0  TCP VM-0-14-centos:patrol-snmp (LISTEN)
    
    # 可供外网访问
    [root@VM-0-14-centos bin]# lsof -i:8161
    COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
    java    15275 root  161u  IPv6 460627948      0t0  TCP *:patrol-snmp (LISTEN)
    # 注意这个"*",它表示可以被外界访问
    # 如果没有出现 "*" 很多时候,你需要注释项目配置文件中的类似于这样的配置文件:
    <property name="host" value="127.0.0.1"/> # activemq jetty.xml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    根据进程名查询

    ps -ef | grep <进程名称>

    ps -ef | grep demo
    
    • 1
    # 普通版
    root@VM-0-14-centos bin]# ps -ef | grep demo
    root      1595     1  0 10:20 ?        00:01:21 java -jar demo-0.0.1-SNAPSHOT.jar
    root     11984  4946  0 19:30 pts/0    00:00:00 grep --color=auto demo
    # 升级版(去掉干扰项)
    [root@VM-0-14-centos bin]# ps -ef | grep demo | grep -v grep
    root      1595     1  0 10:20 ?        00:01:20 java -jar demo-0.0.1-SNAPSHOT.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    UIDPIDPPIDCSTIMETTYTIMECMD
    root15951010:2000:01:20java -jar demo-0.0.1-SNAPSHOT.jar

    解释一下常见的参数

    • PID 程序PID
    • CMD 下达的指令

    所以我们一般都是根据CMD这列来过滤的

    查看JAVA进程

    jps -l

    # 普通版 
    [root@VM-0-14-centos bin]# jps -l
    20274 sun.tools.jps.Jps
    1595 demo-0.0.1-SNAPSHOT.jar
    15275 /usr/local/activemq/apache-activemq-5.16.5//bin/activemq.jar
    
    # 升级版(类似于 ps -ef | grep java | grep -v grep
    [root@VM-0-14-centos bin]# jps -l | grep -v jps
    1595 demo-0.0.1-SNAPSHOT.jar
    15275 /usr/local/activemq/apache-activemq-5.16.5//bin/activemq.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    查看进程所在的地址

    pwdx

    [root@VM-0-14-centos bin]# pwdx 1595
    1595: /home/blog/backend/newbackend
    
    • 1
    • 2

    组合使用

    # 查看系统中所有java进程所在的位置
    pwdx `jps | grep -vi jps | awk '{print $1}'`
    # ``(反斜杠)用于取表达式的值
    # awk -F分隔符 '{print $1}' //表示用分隔符分割后取第一段。
    # awk '{print $1}'  等价于 awk -F空格 '{print $1}' 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [root@VM-0-14-centos bin]# pwdx `jps | grep -vi jps | awk '{print $1}'` 
    1595: /home/blog/backend/newbackend
    15275: /usr/local/activemq/apache-activemq-5.16.5/bin
    
    • 1
    • 2
    • 3
  • 相关阅读:
    自动出价下机制设计系列 (二) : 面向私有约束的激励兼容机制设计
    安卓:Android Studio4.0~2023中正确的打开Android Device Monitor
    HTML表格与表单
    报名开启丨2023 SpeechHome 语音技术研讨会
    【简答题】月薪4k和月薪8k的区别就在这里
    微信授权登录 | 全过程讲解[官方文档->代码梳理->注意点] uniapp+springboot(附Gitee源码)
    某大学ipv6和ipv4结合的校园网规划设计
    CTF-SQL
    大势浏览器DasViewer里面的查询和选择功能,如何实现与矢量数据关联?
    运行原理:eBPF 是一个新的虚拟机吗?
  • 原文地址:https://blog.csdn.net/qq_28019485/article/details/124918159