Linux服务器与java获取时间不一致问题

在实际业务开发中,前段时间遇到了服务器时间正确,却后台java程序打印出的日志时间不一致,通过查询分析,可能有以下情况处理。

服务器时间

  • 可能 JVM 启动 JAR 程序时时间错误
    如果默认的时间没有问题,但是如果在部署时修改 catalina.bat(tomcat) 文件,则需要手动设计时区:
    可以在启动命令加入以下参数: -Duser.timezone=GMT+08

  • nohup java -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -Duser.timezone=GMT+08 -jar xxx.jar >/dev/null 2>&1 &
    

    链接:jar启动参数详解

    -Xmixed           混合模式执行 (默认)
        -Xint             仅解释模式执行
        -Xbootclasspath:<用 : 分隔的目录和 zip/jar 文件>
                          设置搜索路径以引导类和资源
        -Xbootclasspath/a:<用 : 分隔的目录和 zip/jar 文件>
                          附加在引导类路径末尾
        -Xbootclasspath/p:<用 : 分隔的目录和 zip/jar 文件>
                          置于引导类路径之前
        -Xdiag            显示附加诊断消息
        -Xnoclassgc       禁用类垃圾收集
        -Xincgc           启用增量垃圾收集
        -Xloggc:<file>    将 GC 状态记录在文件中 (带时间戳)
        -Xbatch           禁用后台编译
        -Xms<size>        设置初始 Java 堆大小
        -Xmx<size>        设置最大 Java 堆大小
        -Xss<size>        设置 Java 线程堆栈大小
        -Xprof            输出 cpu 配置文件数据
        -Xfuture          启用最严格的检查, 预期将来的默认值
        -Xrs              减少 Java/VM 对操作系统信号的使用 (请参阅文档)
        -Xcheck:jni       对 JNI 函数执行其他检查
        -Xshare:off       不尝试使用共享类数据
        -Xshare:auto      在可能的情况下使用共享类数据 (默认)
        -Xshare:on        要求使用共享类数据, 否则将失败。
        -XshowSettings    显示所有设置并继续
        -XshowSettings:all
                          显示所有设置并继续
        -XshowSettings:vm 显示所有与 vm 相关的设置并继续
        -XshowSettings:properties
                          显示所有属性设置并继续
        -XshowSettings:locale
                          显示所有与区域设置相关的设置并继续
    -X 选项是非标准选项, 如有更改, 恕不另行通知。
    以下选项为 Mac OS X 特定的选项:
        -XstartOnFirstThread
                          在第一个 (AppKit) 线程上运行 main() 方法
        -Xdock:name=<应用程序名称>"