2022工作中遇到的问题四
Posted 周虽旧邦其命维新
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022工作中遇到的问题四相关的知识,希望对你有一定的参考价值。
1、请求60s超时
现象:同事请求出现60s超时,本地正常,生产环境出现超过60s就报超时错误,提示504 gateway timeout
原因:nginx默认后端服务器处理请求超时时间(页面等待服务器响应时间)60s
解决方法:设置合适的后端服务器处理请求超时时间
nginx的conf配置文件,在location / 中添加 proxy_read_timeout 600;(别忘了加分号)如下所示:
location /
...
proxy_read_timeout 150; # 秒
...
2、gitlab端口占用
修改puma web应用端口
vim /var/opt/gitlab/gitlab-rails/etc/puma.rb
bind 'tcp://127.0.0.1:9109'
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端口冲突
重启gitlab服务
gitlab-ctl reconfigure
gitlab-ctl restart
3、查询oracle主键约束
select * from dba_constraints where constraint_name='PK_WM_CONTRL_MATERIAL_RECEIVE_PRICE';
4、jenkins集成迁移到git
1.服务器安装git
yum install git
2.jenkins项目中的源码管理改为git,输入gitlab仓库地址和账号,并指定自动化部署分支
3.如果是后端项目需要给脚本startup.sh添加执行权限
chmod +x ./bin/startup.sh
如:
5、git pull报错
error: Your local changes to the following files would be overwritten by merge:
解决方法:
git stash
git pull origin spd-dev
git stash pop
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%';
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
public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException
PreparedStatement ps = (PreparedStatement) statement;
ps.execute();
return resultSetHandler.handleResultSets(ps);
断点发现是封装结果集时解析出错
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
级联查询代码:
<collection property="detailList" ofType="com.xxxDetail"
select="com.xxxDetailMapper.list" column="id"/>
通过源码分析发现,级联子查询的时候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;
原因分析,子查询中包含多个条件参数,因此mybatis需要把column作为json解析才能知道id是哪个条件参数。
解决方法,修改级联查询代码:
<collection property="detailList" ofType="com.xxxDetail"
select="com.xxxDetailMapper.list" column="backId=id"/>
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)
);
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
检查seata在nacos中的注册的服务信息发现,seata注册在nacos中的地址是192.168.122.1,本地ping或telnet均不成功,spring cloud项目通过服务名获取ip之后由于与192.168.122.1网络不通,所以报错can not connect to services-server
192.168.122.1来自virbr0网卡,这是因为安装系统的时候附带了libvirt服务才会生成的一个东西。virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的
虚机网卡提供 NAT 访问外网的功能。
virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。
解决方法,启动的时候指定外网ip,不要使用127.0.0.1
./seata-server.sh -h 192.168.xxx
以上是关于2022工作中遇到的问题四的主要内容,如果未能解决你的问题,请参考以下文章