`

【异常】JVM 获取 Linux 时间错误(相差12小时)

 
阅读更多

问题

有两台Linux机器:

date 命令查看时间相同

通过 date 命令查看时间,发现两台机器区域语言和时间都相同:

 

JVM获取系统时间相差12小时

通过最基本的java代码 new Date() 获得时间,发现两台机器的系统时间相差12小时。
其中一台输出的时区与上述date命令相同,都是东八区(CST,中国标准时间)。
另一台输出的时区与date命令不符,是西五区(EDT,美国东部白昼时间)。
根据理论经度,东八区 与 西五区 相差13小时。但因为时值美国夏令时,时刻的值被“人为”调整,所以两台机器相差12小时。



 

 

解决方法

可以确定那台 date命令所得时区与JVM所得时区不同的 机器时间是错的。
修复方法就是以正确的方式重新设置系统时区:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

扩展

尽量自动化,减少对人肉运维的依赖

上述 date命令所得时区 与 JVM所得时区 不一致的问题,就是因为操作系统的时区未被正确设置。
这往往是不合格的“运维人员”“虎操作”导致的。
 

这种错误对于需要处理时间的Java应用而言是致命的!!!
不但无法得到正确的系统当前时间,也无法解析历史时间数据。 如,你之前在MySQL中正确存储了一个时间值,在这种错误的系统环境中,JVM解析这个来自数据库的行为也会出错。
 

此外,如果你的系统需要多台机上的Java应用基于各自的系统时间来合作完成某项业务,那么错误的那台机器会将你的业务逻辑完全破坏。
这种错误还非常难排查,你几乎不会去怀疑系统时区问题,因为date命令显示时区是正确的。

 

尽量使用维护成本低、准确无歧义的方式表示时间

不要使用时区缩写

时区缩写很可能有歧义。如,CST 可以表示:

  • 美国中部时间:Central Standard Time (USA)
  • 澳大利亚中部时间:Central Standard Time (Australia)
  • 中国标准时间:China Standard Time
  • 古巴标准时间:Cuba Standard Time

可以考虑用数值来表示时区。如,+08:00 表示东八区。

 

不要用夏令时

很多国家有 夏令时 和 冬令时 之分。在夏令时,时刻会被人为调整。
这种做法其实非常得不偿失,应尽量避免去涉及此类问题。

 

不要用年号纪年法

这也是一种“人祸”,非常浪费社会资源。
日本换个天皇就改个年号,平白浪费了很多社会资源。
这种纪年法展示的信息也与世界标准的公元纪年法格格不入,非常不利于信息交流。
 

很多非国际公认度量单位也对世界级的信息交流非常不友好,尽量不要使用。如,英尺、加仑、盎司。

 

CentOS7修改时区的正确姿势

Java TimeZone 和 Linux TimeZone问题

 

  • 大小: 1.9 KB
  • 大小: 2.4 KB
  • 大小: 2.6 KB
分享到:
评论

相关推荐

    linux 下用java 获取系统信息 cpu mem jvm等

    linux 下用java 获取系统信息 cpu mem jvm等 用java调用系统命令得到,方便实用

    java获取系统时间与实际相差8小时的解决方法

    然而,有时我们可能会遇到一个常见问题,即从Java程序中获取到的时间与实际时间相差8小时,这主要是由于时区设置不正确导致的。这个问题在跨时区开发和运行应用时尤为突出。 首先,我们需要理解Java中的日期和时间...

    Linux简单调优与JVM参数.docx

    Linux 服务器调优与 JVM 参数调优 本文主要介绍了 Linux 服务器调优和 JVM 参数调优的相关知识点,以便提高服务器性能和 JVM 应用程序的运行效率。 Linux 服务器调优 Linux 服务器调优是指对 Linux 操作系统的...

    基于内核态JVM的Linux设备驱动程序.pdf

    【基于内核态JVM的Linux设备驱动程序】 在计算机科学领域,设备驱动程序是操作系统与硬件设备之间的桥梁,它们负责管理和控制硬件设备,确保操作系统能够有效地与硬件交互。然而,由于驱动程序通常由硬件厂商编写,...

    JVM调优和Linux常见面试题.zip

    在IT行业中,JVM(Java Virtual Machine)调优和Linux系统操作是两个至关重要的技能,尤其是在处理大型企业级应用时。对于Java开发者来说,理解JVM的工作原理并能进行有效的调优,可以显著提升应用程序的性能和稳定...

    jvm-exporter.json

    说明:kubernetes集群监控jvm内存监控模板

    jvm异常分析文件

    本篇文章将深入探讨基于给定文件名的JVM异常分析主题,包括socket端口占用问题和内存溢出系统异常,以及如何解决这些问题以防止异常宕机。 首先,让我们关注"623scoket端口占有和内存溢出系统异常分析"这个文件。...

    解决idea9 开机 jvm无法启动的错误

    这里我们遇到了一个关于Idea9的常见问题,即“开机jvm无法启动”的错误。这个问题可能阻碍了用户正常使用IDE,但不用担心,我们可以通过一些步骤来解决它。 首先,我们需要理解什么是JVM(Java Virtual Machine)。...

    JVM crash 错误日志分析

    3. **异常报告**:错误日志会记录导致JVM崩溃的异常类型和消息。例如,"java.lang.OutOfMemoryError: Java heap space"表明是由于堆内存不足导致的问题。 4. **内存使用情况**:日志会包含JVM在崩溃时的内存使用...

    jvm参数设置

    本文将基于提供的文件内容,深入解析Linux环境下JVM的基本参数设置方法及原理。 #### 一、内存参数设置 在JVM参数配置中,内存管理是最为关键的部分之一。下面我们将详细解释几个重要的内存相关参数及其作用: 1....

    java获得jvm内存大小

    了解并监控JVM的内存使用情况,对于预防和解决内存溢出错误至关重要。通过动态地调整`-Xms`和`-Xmx`参数,可以在运行时根据实际需求优化内存分配,从而提高程序的性能和稳定性。此外,定期检查和分析`heapSize`、`...

    Tomcat JVM内存优化(Linux环境)

    ### Tomcat JVM内存优化(Linux环境) 在Linux环境下运行Tomcat服务器时,经常会遇到与Java虚拟机(JVM)相关的内存溢出问题。这些问题通常表现为`java.lang.OutOfMemoryError`异常,具体又分为两类:`PermGen ...

    计算机学习资料(Java,Jvm,Linux,Mysql,Netty,Redis,Netty,Spri.zip

    计算机学习资料(Java,Jvm,Linux,Mysql,Netty,Redis,Netty,Spri

    运行eclipse提示JVM错误的解决

    ### 运行Eclipse提示JVM错误的解决 在使用Eclipse进行开发的过程中,有时可能会遇到JVM(Java虚拟机)错误的问题。这类问题通常表现为启动Eclipse时出现错误提示,例如“jvm terminated. Exit code=-1”。本文将...

    jdk,jvm源码

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...

    JVM-内存管理 2012-12.pdf

    JVM(Java虚拟机)是运行Java程序的核心引擎,负责在不同操作系统上提供统一的运行环境。JVM内存管理是Java平台的一个重要特性,其内存空间的分配和回收机制对Java应用程序的性能和稳定性有着至关重要的影响。 首先...

    JVM-Sandbox,基于jvm的实时无创aop框架容器.zip

    - **异常处理**:在遇到异常时,可以自定义处理逻辑,提供更好的错误反馈和恢复机制。 6. **使用与集成**:JVM-Sandbox通常通过Maven或Gradle等构建工具引入到项目中,然后通过API或者配置文件定义切面规则,即可...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...

    linux & JVM内存结构分析

    在IT领域,Linux操作系统和Java虚拟机(JVM)是两个至关重要的组成部分。Linux作为一款开源的操作系统,被广泛应用于服务器、云计算以及嵌入式设备等。而JVM则是Java程序运行的基础,它负责解析和执行Java代码,并...

    JVM致命错误完全解析:基于现实案例

    崩溃原因:崩溃原因是 JVM 致命错误的直接原因,可能是因为内存溢出、Null Pointer 异常、数组越界等原因。崩溃原因可以帮助开发者和维护者快速定位和解决问题。 错误信息:错误信息记录了错误的详细信息,包括线程...

Global site tag (gtag.js) - Google Analytics