我遇到的部分生产事故

事故一,jvm频繁full gc

  1. 大对象(运营商数据;数据库查询未加查询条件,结果集过大;第三方接口或异步消息)
  2. 死循环;
  3. 大对象;
  4. String.intern()
  5. 并发量()

排查方法:

jmap -heap 查看进程jvm的使用情况
jmap -histo  pid  统计对象的数量
jmap -dump:live  dump堆对象
jstack 快速连续几次输出(建议shellfor循环,sleep 1秒)
jstat -gcutil pid 2
查询是否有慢sql
select * from information_schema.`PROCESSLIST` t where t.INFO is not null ORDER BY t.TIME desc;
针对慢查询sql生产kill语句;
select CONCAT('kill -9 ',t.ID,';') from information_schema.`PROCESSLIST` t where t.INFO is not null ORDER BY t.TIME desc;
统计tcp的数量
netstat -na|grep ESTABLISHED|wc -l

pstree -a|wc -l 统计当前进程总数
ulimit -a 查看用户支持线程数

事故二:内存泄露

内存溢出:程序没有足够的内存使用时,内存溢出后程序基本上就无法正常运行;
内存泄露:当程序不能及时释放内存,导致占用内存逐渐增加,就是内存泄露;
static 常量拼接内容String.intern()

堆外内存,人脸ocr服务,照片上传

事故三:幂等问题

额度重复恢复,推入消息队列,做幂等处理
用户重复下单,临时表,redis分布式锁

事故四:缓存雪崩

  1. 同一时间大批量到期导致,批量刷入缓存时间,+随机数

事故五:redis链接未释放

  1. 代码生成器开启事务,导致redis链接未及时释放,无连接可用;
  2. 缓存共用,keys * ,大对象存储使用导致redis不可用;

事故六:磁盘IO导致线程阻塞,cpu彪高

特征:

  1. cpu占用过高,gc频繁;
    2,发现log4j的线程占用过高;
    3,日志文件过大(几十g),同时日志输出延迟;
    禁止System.out.println,禁止console输出,日志切割
    4,log4j1.* 并发死锁

事故七:无可用线程可创建

1,appuser启动的项目,默认只有1024,通过ulimit查看
2,一台ecs部署多个tomcat,请求量稍微大些的时候会出现该问题

ps:注意下文件句柄数

 vim /etc/security/limits.d/90-nproc.conf
appuser    soft    nproc     10240
appuser    hard    nproc     10240

事故八:高并发情况下短连接释放过慢

操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接

vim/etc/sysctl.conf
#编辑文件,加入以下内容:
net.ipv4.tcp_syncookies =1#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse =1#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle =1#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout=30#修改系統默认的 TIMEOUT 时间。
#然后执行以下命令让参数生效
/sbin/sysctl -p

事故九:数据库死锁问题

1,常见高峰期给慢sql添加索引或修改表结构,表锁导致无法insert

事故十:域名劫持

前端h5,引导到联通的广告
更换https

事故十一:宽带资源耗尽

前端访问过慢,10mb带宽升级到100mb
将前端资源都放入到cdn

事故十二: 静态锁导致的并发问题

额度重构,分表后批量生成主键id,静态方法加锁,多线程调用
1,去掉静态方法
2,使用雪花算法

事故十三: tomcat配置问题

  1. maxPostSize=“0” 之前0为不限制,升级一次tomcat版本到7.0.70,0变为了0;
  2. 多个tomcat部署到一台实例

tomcat优化:

  1. nio ;
  2. 线程池数量& acceptCount ;
  3. gzip压缩
  4. catalina.out 日志切割
终极日志切割
vim /etc/logrotate.d/auth
/app/auth/apache-tomcat-8.5.28/logs/catalina.out {
    copytruncate
    dateext
    daily
    rotate 10
    missingok
    notifempty
    compress
    delaycompress
}

事故十四 数据库

  1. 多个业务库共用一个实例;->核心业务库独立;
  2. 慢sql,无索引;
  3. 修改库表结构时,锁死;

事故十五:redis的key已过期,但还能获取

当redis的cpu过高的时候,定期删除就不一定启动作用;
定期删除& 惰性删除
定期删除: 定期从redis中获取数据,检查并删除,cpu过高时就无法执行,有很大概率能拿到未删除的key
惰性删除:每次get的时候主动去校验

事故十六 同一个用户启动多个dubbo项目;

  1. dubbo的缓存文件是共享的,同一个用户会导致.dubbo文件被覆盖

事故十七 定时任务中创建线程池;

  1. 导致资源打满,cpu彪高;

事故十八,默认超时时间 60秒

导致系统群雪崩;
1, 业务板块拆分并独立域名;
2,架构树形化;

事故十九 宽带资源耗尽

外网100mb的宽带

  1. 静态资源cdn;
  2. 开启tomcat/ng压缩,增加带宽;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值