• 服务宕机问题排查记录


    问题:从oracle查询1800w数据,根据尾号截取,加载到内存,取表数据四个字段,其中包含手机号、两个10位中文字段加一个日期,

    用jedisCluster进行管道操作psetStr
    当程序加载到第五批次左右,程序宕机,通过重启,重新加载数据,配合
    ps -ef|grep 查询进程号,jstat -gcutil 进程id 2000,top查看当前内存占用(-c查看执行脚本)、free -m 查看机器可用内存,几个命令,分析出当前机器空闲内存不足
    修改:调整程序启动的最大堆内存参数、修改程序,采用后两位尾数查询方式,减少分页量的大小,从10个批次扩充到100个批次,配合多线程处理
    后续问题:由于成功加载了redis数据,导致redis数据内部占用内存较大,使其他程序运行时宕机,解决:将redis下的dump文件
    

    top 指令:如果swap的uesd变化频繁,说明内存可能不足了,free少,不代表真的不够用了,mem的used表示,之前使用的内存,使用之后不会立即返回free
    堆、栈分配的内存,如果没有使用是不会占用实存(RES)的,只会记录到虚存(VIRTT)。
    如果程序占用实存比较多,说明程序申请内存多,实际使用的空间也多。
    如果程序占用虚存比较多,说明程序申请来很多空间,但是没有使用。
    比如可能会有【程序虚存300G+, 实存只有不到15G】

    gcstat -gcutil 进程号
    S0:幸存1区当前使用比例
    S1:幸存2区当前使用比例
    E:伊甸园区使用比例
    O:老年代使用比例
    M:元数据区使用比例
    CCS:压缩使用比例
    YGC:年轻代垃圾回收次数
    FGC:老年代垃圾回收次数
    FGCT:老年代垃圾回收消耗时间
    GCT:垃圾回收消耗总时间

  • 相关阅读:
    SVM学习笔记-线性支撑向量机
    阿里面试回来,想和Java程序员谈一谈
    看外国女程序员如何直播写代码
    shoeBox超实用的雪碧图(Sprite)图制作工具-使用
    Android图像处理之图形特效处理
    SMP、NUMA、MPP体系结构介绍
    TIOBE 2017 8月编程语言排行榜 后院“硝烟四起”
    Android Studio中Git和GitHub使用详解
    矩阵乘法快速幂 codevs 1574 广义斐波那契数列
    矩阵乘法 codevs 1287 矩阵乘法
  • 原文地址:https://www.cnblogs.com/brxHqs/p/15901040.html
Copyright © 2020-2023  润新知