• 2022工作中遇到的问题四


    1、请求60s超时

    现象:同事请求出现60s超时,本地正常,生产环境出现超过60s就报超时错误,提示504 gateway timeout

    原因:nginx默认后端服务器处理请求超时时间(页面等待服务器响应时间)60s

    解决方法:设置合适的后端服务器处理请求超时时间

    nginx的conf配置文件,在location / {}中添加 proxy_read_timeout 600;(别忘了加分号)如下所示:

    location / {
            ...
            proxy_read_timeout 150;  # 秒
            ...
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、gitlab端口占用

    修改puma web应用端口

    vim /var/opt/gitlab/gitlab-rails/etc/puma.rb

    bind 'tcp://127.0.0.1:9109'
    
    • 1

    gitlab配置文件/etc/gitlab/gitlab.rb

     puma['listen'] = '127.0.0.1'
     puma['port'] = 9109 # 默认8080,与 `puma.rb` 中配置相同的端口
     puma['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
     puma['somaxconn'] = 1024
     
     nginx['listen_port'] = 8083 # 修改内置nginx使用的端口,默认80,避免与服务器上原有nginx端口冲突
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重启gitlab服务

    gitlab-ctl reconfigure
    gitlab-ctl restart
    
    • 1
    • 2

    3、查询oracle主键约束

    select * from dba_constraints where constraint_name='PK_WM_CONTRL_MATERIAL_RECEIVE_PRICE';
    
    • 1

    4、jenkins集成迁移到git

    1.服务器安装git

    yum install git
    
    • 1

    2.jenkins项目中的源码管理改为git,输入gitlab仓库地址和账号,并指定自动化部署分支

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdlpuFFe-1656927341298)(C:\Users\11244\AppData\Roaming\Typora\typora-user-images\image-20220430114248998.png)]

    3.如果是后端项目需要给脚本startup.sh添加执行权限

    chmod +x ./bin/startup.sh
    
    • 1

    如:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmULh2c0-1656927341300)(C:\Users\11244\AppData\Roaming\Typora\typora-user-images\image-20220430114529006.png)]

    5、git pull报错

    error: Your local changes to the following files would be overwritten by merge:
    
    • 1

    解决方法:

    git stash
    git pull origin spd-dev
    git stash pop
    
    • 1
    • 2
    • 3

    6、查看oracle约束

    SELECT * FROM DBA_CONSTRAINTS WHERE constraint_name like '%FK_CERT_CHA_REFERENCE_BASE_CER%';
    SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME like '%BASE_CERT%';
    
    • 1
    • 2

    7、sql执行报错ParserException

    ExecutorException: Error preparing statement. Cause: com.alibaba.druid.sql.parser.ParserException: TODO : pos 293, line 4, column 27, token ON

    进入源码查看statement中的sql语句,发现sql正常

    org.apache.ibatis.executor.statement.PreparedStatementHandler#query
    
    • 1
    public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
        PreparedStatement ps = (PreparedStatement) statement;
        ps.execute();
        return resultSetHandler.handleResultSets(ps);
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    断点发现是封装结果集时解析出错

    8、级联查询报错

    Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'id' from result set.  Cause: com.alibaba.fastjson.JSONException: syntax error, expect {, actual int, pos 15, line 1, column 16220526000012424
    
    • 1

    级联查询代码:

    <collection property="detailList" ofType="com.xxxDetail"
                        select="com.xxxDetailMapper.list" column="id"/>
    
    • 1
    • 2

    通过源码分析发现,级联子查询的时候mybatis把id作为json解析,所以出现了上述错误信息

    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
            String sqlJson = rs.getString(columnName);
            if (null != sqlJson) {
                return JSONObject.parseObject(sqlJson, clazz);
            }
            return null;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    原因分析,子查询中包含多个条件参数,因此mybatis需要把column作为json解析才能知道id是哪个条件参数。

    解决方法,修改级联查询代码:

    <collection property="detailList" ofType="com.xxxDetail"
                        select="com.xxxDetailMapper.list" column="{backId=id}"/>
    
    • 1
    • 2

    9、oracle模拟drop if exists

    BEGIN
       EXECUTE IMMEDIATE 'DROP TABLE abc';
    EXCEPTION
       WHEN OTHERS THEN
          IF SQLCODE != -942 THEN
             RAISE;
          END IF;
    END;
    /
    CREATE TABLE abc
    (
       ID                   VARCHAR2(128)        NOT NULL,
       TASK_STATUS          NUMBER(2)            NOT NULL,
       SURGERY_CODE         VARCHAR2(50)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    10、连接seata报错can not register RM

    linux服务器启动Seata后,Spring cloud项目连接seata报错:

    can not connect to 192.168.122.1:8091 cause:can not register RM,err:can not connect to services-server
    
    • 1

    检查seata在nacos中的注册的服务信息发现,seata注册在nacos中的地址是192.168.122.1,本地ping或telnet均不成功,spring cloud项目通过服务名获取ip之后由于与192.168.122.1网络不通,所以报错can not connect to services-server

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZojUK7k-1656927341300)(C:\Users\11244\AppData\Roaming\Typora\typora-user-images\image-20220704153839337.png)]

    192.168.122.1来自virbr0网卡,这是因为安装系统的时候附带了libvirt服务才会生成的一个东西。virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的

    虚机网卡提供 NAT 访问外网的功能。

    virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-By5SUlYc-1656927341301)(C:\Users\11244\AppData\Roaming\Typora\typora-user-images\image-20220704160037989.png)]

    解决方法,启动的时候指定外网ip,不要使用127.0.0.1

    ./seata-server.sh -h 192.168.xxx
    
    • 1
  • 相关阅读:
    CTF--攻防世界杂项--第二课
    室内温度控制仿真(Simulink+PLC)
    redis性能管理
    QNX: A guide for Realtime programmers
    第03篇: 手写JavaRPC框架之搞定序列化
    【CSDN】markdown实用语法
    基于springboot的少儿识字系统
    汕头联想 ibm x3500 M5服务器上门维修记录
    流媒体服务器
    使用hugging face开源库accelerate进行多GPU(单机多卡)训练卡死问题
  • 原文地址:https://blog.csdn.net/noob9527/article/details/125605138