问题
有两台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 表示东八区。
不要用夏令时
很多国家有 夏令时 和 冬令时 之分。在夏令时,时刻会被人为调整。
这种做法其实非常得不偿失,应尽量避免去涉及此类问题。
不要用年号纪年法
这也是一种“人祸”,非常浪费社会资源。
日本换个天皇就改个年号,平白浪费了很多社会资源。
这种纪年法展示的信息也与世界标准的公元纪年法格格不入,非常不利于信息交流。
很多非国际公认度量单位也对世界级的信息交流非常不友好,尽量不要使用。如,英尺、加仑、盎司。
《Java TimeZone 和 Linux TimeZone问题》
相关推荐
linux 下用java 获取系统信息 cpu mem jvm等 用java调用系统命令得到,方便实用
然而,有时我们可能会遇到一个常见问题,即从Java程序中获取到的时间与实际时间相差8小时,这主要是由于时区设置不正确导致的。这个问题在跨时区开发和运行应用时尤为突出。 首先,我们需要理解Java中的日期和时间...
Linux 服务器调优与 JVM 参数调优 本文主要介绍了 Linux 服务器调优和 JVM 参数调优的相关知识点,以便提高服务器性能和 JVM 应用程序的运行效率。 Linux 服务器调优 Linux 服务器调优是指对 Linux 操作系统的...
【基于内核态JVM的Linux设备驱动程序】 在计算机科学领域,设备驱动程序是操作系统与硬件设备之间的桥梁,它们负责管理和控制硬件设备,确保操作系统能够有效地与硬件交互。然而,由于驱动程序通常由硬件厂商编写,...
在IT行业中,JVM(Java Virtual Machine)调优和Linux系统操作是两个至关重要的技能,尤其是在处理大型企业级应用时。对于Java开发者来说,理解JVM的工作原理并能进行有效的调优,可以显著提升应用程序的性能和稳定...
说明:kubernetes集群监控jvm内存监控模板
本篇文章将深入探讨基于给定文件名的JVM异常分析主题,包括socket端口占用问题和内存溢出系统异常,以及如何解决这些问题以防止异常宕机。 首先,让我们关注"623scoket端口占有和内存溢出系统异常分析"这个文件。...
这里我们遇到了一个关于Idea9的常见问题,即“开机jvm无法启动”的错误。这个问题可能阻碍了用户正常使用IDE,但不用担心,我们可以通过一些步骤来解决它。 首先,我们需要理解什么是JVM(Java Virtual Machine)。...
3. **异常报告**:错误日志会记录导致JVM崩溃的异常类型和消息。例如,"java.lang.OutOfMemoryError: Java heap space"表明是由于堆内存不足导致的问题。 4. **内存使用情况**:日志会包含JVM在崩溃时的内存使用...
本文将基于提供的文件内容,深入解析Linux环境下JVM的基本参数设置方法及原理。 #### 一、内存参数设置 在JVM参数配置中,内存管理是最为关键的部分之一。下面我们将详细解释几个重要的内存相关参数及其作用: 1....
了解并监控JVM的内存使用情况,对于预防和解决内存溢出错误至关重要。通过动态地调整`-Xms`和`-Xmx`参数,可以在运行时根据实际需求优化内存分配,从而提高程序的性能和稳定性。此外,定期检查和分析`heapSize`、`...
### Tomcat JVM内存优化(Linux环境) 在Linux环境下运行Tomcat服务器时,经常会遇到与Java虚拟机(JVM)相关的内存溢出问题。这些问题通常表现为`java.lang.OutOfMemoryError`异常,具体又分为两类:`PermGen ...
计算机学习资料(Java,Jvm,Linux,Mysql,Netty,Redis,Netty,Spri
### 运行Eclipse提示JVM错误的解决 在使用Eclipse进行开发的过程中,有时可能会遇到JVM(Java虚拟机)错误的问题。这类问题通常表现为启动Eclipse时出现错误提示,例如“jvm terminated. Exit code=-1”。本文将...
Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...
JVM(Java虚拟机)是运行Java程序的核心引擎,负责在不同操作系统上提供统一的运行环境。JVM内存管理是Java平台的一个重要特性,其内存空间的分配和回收机制对Java应用程序的性能和稳定性有着至关重要的影响。 首先...
- **异常处理**:在遇到异常时,可以自定义处理逻辑,提供更好的错误反馈和恢复机制。 6. **使用与集成**:JVM-Sandbox通常通过Maven或Gradle等构建工具引入到项目中,然后通过API或者配置文件定义切面规则,即可...
标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...
在IT领域,Linux操作系统和Java虚拟机(JVM)是两个至关重要的组成部分。Linux作为一款开源的操作系统,被广泛应用于服务器、云计算以及嵌入式设备等。而JVM则是Java程序运行的基础,它负责解析和执行Java代码,并...
崩溃原因:崩溃原因是 JVM 致命错误的直接原因,可能是因为内存溢出、Null Pointer 异常、数组越界等原因。崩溃原因可以帮助开发者和维护者快速定位和解决问题。 错误信息:错误信息记录了错误的详细信息,包括线程...