服务器问题记录

  •  页面请求,不定时无响应

现象:前端页面,有时会打不开;有时个别请求无返回信息;f12 查看请求,提示“no-referrer-when-downgrade”

104303_g67a_2347047.png

112800_PoRY_2347047.png

分析过程:

1、查看请求对应的服务端是否正常(查看服务器日志),发现服务端对于请求可以正常响应;从前端来看,同一个请求,有时有返回信息,有时无返回信息

2、查看nginx access 日志,发现部分请求返回http 499;同一个uri,有返回http 200 和http 499

3、查看nginx upstream 配置,发现配置中存在一个无效的服务端地址

结论:

nginx 不会检测upstream 中配置的服务器是否有效,当配置了无效的服务端地址时,请求通过nginx 转发到该无效的服务器时,就会造成请求不可用,nginx 会将该请求的响应封装为 http 499

  • dubbo 提示线程池已满

现象:dubbo 提示线程池已满;前端显示服务不稳定

分析过程:

1、查看dubbo 服务日志,日志仅显示线程池已满

2、查看服务对应的 error 日志,发现zookeeper 分布式锁有时会释放失败,然后去查看zookeeper 日志,未发现异常

3、阿里云监控报警,数据库CPU 占比超过90%

结论:

查询某列表未使用缓存,导致大量请求(每分钟5W次左右)在短时间内访问数据库(本身查询速度没问题,但是请求量太大),造成数据库瓶颈,并对正常的写业务造成影响,大量对于数据库的访问,都在排队,造成响应时间过长,dubbo服务线程池压满

解决方案:

1、按需对查询增加 redis 缓存,JVM 缓存,nginx 缓存

2、对数据库进行读写分离处理,防止下一次大量请求导致的数据库瓶颈问题

  • HttpClient 多线程异常

现象:

java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.

原因:多线程状态下,公用一个HttpClient对象,一个请求未结束,再次发起新的请求,就会报这个错

解决方法:

1、低版本的HttpClient,可以使用 ThreadSafeClientConnManager 来代替 BasicClientConnManager

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
cm.setMaxTotal(20);
HttpClient client = new DefaultHttpClient(cm, httpParams);

2、高版本的HttpClient,可以使用 PoolingHttpClientConnectionManager

PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager();
pcm.setMaxTotal(20);
CloseableHttpClient client = HttpClients.custom().setConnectionManager(pcm).build();

  • MySql 存储空间清理

数据文件的清理:使用 truncate table_name 来清理数据量多的表

使用delete 的话,不会释放磁盘空间,需要使用:optimize table tab_name 来释放。

注意:optimize 会锁表,应在空闲时期进行处理

select sum(data_length + index_length + data_free) / 1024 / 1024 from information_schema.tables;

查询数据文件所占空间

  • 挖矿病毒 minerd

解决方案:

挖矿病毒伪装为 ntp 进程,但正常的ntp进程名为ntpd

rm -rf /var/spool/cron/crontabs
rm -rf ~/.ssh/KHK75NEOiq
rm -rf /opt/KHK75NEOiq33
rm -rf /opt/*
rm -rf /etc/init.d/ntp
rm -rf /usr/sbin/ntp
rm -rf /usr/local/etc
pkill minerd
kill -9 (/usr/sbin/ntp的进程号)

  • java 进程CPU和内存分析

1、top 命令查看cpu和内存占用较大的进程pid

162954_tQBT_2347047.png

2、根据进程pid,查看内部线程占用cpu情况

ps -mp 1316 -o THREAD,tid,time | sort -rn | less

(sort -rn 以数值的方式进行逆序排列)

163239_xTgQ_2347047.png

3、找出占用cpu比较高的TID,需要将TID转换为十六进制,例如:printf "%x\n" 1731,结果 6c3

4、使用 jstack 1316 查看具体对应的线程

163627_i0R5_2347047.png

5、使用 jstat -gcutil 1316 1000 100 查看jvm内存和gc情况

163851_JATe_2347047.png

  • zookeeper 数据清理

./bin/zkCleanup.sh -n 50  使用 zookeeper 自带的清理脚本,可清理 log 和 snapshot,-n 50 是指保留50个文件(注意:是log和snapshot各保留50个的意思)

zookeeper 版本在3.4 以上的,也可以在配置中配置自动清理(zoo.cfg):

autopurge.snapRetainCount=50    # 保留50个

autopurge.purgeInterval=72    # 自动清理间隔,单位:小时

 

 

转载于:https://my.oschina.net/u/2347047/blog/1619603

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值