1.正式环境更新后不就服务器cpu飙升,最终服务器卡死,重启tomcat后正常,不就后又再次卡死.

  原因:更新时使用./shutdown.sh停止服务器,未能将quartz线程杀死,重新启动之后,原认定任务仍然在继续执行.

  解决:kill 掉进程后重新启动正常. 在代码中增加服务器停止后,手动关闭quartz任务.

  

public class QuartzStop implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) { }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        try {
            Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
            defaultScheduler.shutdown(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

2.hessian连接通道关闭,但接口地址能够正常访问

  原因:设置的hessian连接超时关闭时间过短,在接口还没有返回或整准备返回执行结果时,发现通道已经被关闭.

  解决:增长连接超时关闭时长,改进接口熔断机制.

HessianProxyFactory hessianProxyFactory = new HessianProxyFactory();
        hessianProxyFactory.setConnectTimeout(10000);
        hessianProxyFactory.setReadTimeout(10000);

 

 

3.外网,内网能够正常访问页面,但是专网无法打开页面,但接口能够正常访问

  原因:调试发现,页面需要的其中一个js文件返回 http 206 ,curl时也一样,在分段续传的过程中,防火墙将js其中一段截取了下来,导致续传永远无法完成,持续等待.

  解决:开启服务器压缩,采用gzip方式传输

  但是,某些浏览器不支持,会增加服务器以及客户端的cpu压力

compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/javascript,text/css,text/plain"

 

4. 新建任务时,任务的创建时间突然变成了明天的时间,服务器date -R显示时间时区均正常

  原因:通过hwclock --show 查看linux硬件时间时发现与系统时间相差8小时,而程序获取到的时间正好是这个时间,也就是说代码  System.currentTimeMillis() 

  获取到了硬件时间而不是系统时间,奇怪的是过段时间去查看系统硬件时间又变回正常,暂未找到解决办法.

 

5.mysql 行锁之后无法释放,出现死锁,整个业务卡死

  原因:mysql 的select ..for update 与oracle存在差异,mysql 不支持nowait的方式,在等待的过程中,程序向下继续执行了长select操作,同时默认的等待超时时间过长(数据库设置两分钟),导致任务直接卡住两分钟,在此过程中,整个业务卡死,无法操作.

  解决:取消了锁行后的长select操作,同时将行锁的释放提前,同时在分支处理方式中添加释放锁的操作.

 

6.ORA-01882: timezone region not found

JAVA_OPTS="-Duser.region=CN -Duser.timezone=GMT=GMT+8"

7.tomcat版本升级之后url访问失败

  tomcat 新版本对于url链接中的特殊字符处理,旧版本中空格和中文不做处理可能可以识别,但在新版本中,某些浏览器下中文必须urlencode ,空格必须移除。原来处理图片缓存的url链接之后跟的new Date()需要替换成毫秒值。

 

8.elastic job 启动 Splitter 类中 splitToList 方法找不到。

  更换guava 版本为18.0不再出现。