从boost库到时间戳

一、以问题引入
授权证书一般有到期时间的说法,公司测试同事在测试更新后的证书时,将系统时间调到了2050年,重启服务后发现各个进程的cpu占用率特别高;结合日志分析,发现这些进程 都在不停的刷heartbeat()的日志,也就是在频繁的进行心跳。

信息1:查看代码可知心跳间隔在配置文件中设置的是30秒
信息2:公司使用的mysql服务业在频繁重启,查看日志发现 This MySQL server doesn’t support dates later then 2038
信息3: 将系统时间调到2037年,发现mysql无问题,进程cpu占用率也下来了。

二、确定问题点或问题方向

#include <boost/date_time.hpp>						//boost的date_time模块的头文件
#include <boost/thread.hpp>
#include <iostream>int main(){while(1){auto sec = boost::posix_time::seconds(30); //心跳间隔30秒boost::this_thread::sleep(sec);std::cout<<"=== "<<sec<<std::endl;	       //使用cout代替心跳通信逻辑}return 0;
}

简化heartbeat()函数逻辑,分别在2037 2038 2050年测试,发现代码内采用的boost库计时功能在2038 2050年不准确(终端频繁打印输出)。
加上其他同事提示int32位存储时间戳会存在溢出的情况,就逐步确定问题是2038年时间戳的方向了

其他辅助:
相同测试代码在 boost-1.58 boost-1.71环境下对比,高版本始终无问题,低版本在2038年有问题,所以细分方向是boost-1.58版本的date_time模块在时间戳方便存在缺陷

三、boost低版本date_time模块在时间戳方面缺陷的解决方法
修改boost/date_time/time_resolution_traits.hpp 文件中 类模板time_resolution_traits的默认模板参数类型
typename var_type = boost::int32_t 替换为 boost::int64_t即可

对比boost-1.71版本内的该文件,可知1.67版本开始,官方已经开始采用int64_t类型来存储时间戳了

四、gdb定位流程(可选择性阅读)
图1
图1
图 2
在这里插入图片描述
图3
在这里插入图片描述

图4
在这里插入图片描述

图5
在这里插入图片描述

图6
在这里插入图片描述

图7
在这里插入图片描述

图8
在这里插入图片描述

图9
在这里插入图片描述

图10
在这里插入图片描述

图11
在这里插入图片描述
注:实际调试过程可能并没有这么精简

  • boost::this_thread 这个命名空间在哪个头文件定义的?
  • boost::this_thread::sleep()对应的头文件我找到了,但是函数重载了,会走到哪个函数呢?应该给哪个加断点呢?

五、复测
尝试将上述图11定位到的代码修改为int64_t, 再次测试,可以发现在2038年 2050年不会再存在问题

六、2038年时间戳的大致梳理

  1. int32_t 本质是 int 类型,即32位有符号整数,取值范围 − 2 31 -2^{31} 231 2 31 − 1 2^{31}-1 2311,即 − 2147483648 -2147483648 2147483648 2147483647 2147483647 2147483647
  2. 使用python脚本输出 2038年1月19日03:14:07 UTC 对应的时间戳,结果是 2147483647
from datetime import datetime, timezone  
import time  # 设置目标日期和时间(UTC)  
target_date_time = datetime(2038, 1, 19, 3, 14, 7, tzinfo=timezone.utc)  # 将datetime对象转换为时间戳(秒)  
timestamp = int(target_date_time.timestamp())  # 打印时间戳  
print(timestamp) 
  1. 使用gdb对时间戳进行尝试
(gdb) set $aa=2147483647    # 赋值32位有符号整型数的最大值给aa,对应的是 2038年1月19日03:14:07 UTC
(gdb) ptype $aa             # 打印aa的类型,结果是int
type = int
(gdb) p $aa                 # 打印aa的值
$8 = 2147483647
(gdb) set $aa=$aa+1         # aa+1,对应的是 2038年1月19日03:14:08 UTC
(gdb) ptype $aa             # 可以看到aa的类型不变
type = int
(gdb) p $aa                 # 超出了int类型的最大值,溢出了,直接变为int类型的最小值
$9 = -2147483648
(gdb)
  1. 如果时间戳采用64位整型数表示,情况会怎么样?
    先明确64位有符号整型数的取值范围 − 2 63 -2^{63} 263 2 63 − 1 2^{63}-1 2631,即 9223372036854775808 9223372036854775808 9223372036854775808 9223372036854775807 9223372036854775807 9223372036854775807
(gdb) set $bb=9223372036854775807    # 赋值64位有符号整型数的最大值给bb
(gdb) ptype $bb                      # 打印bb的类型,输出是long long
type = long long
(gdb) p $bb
$10 = 9223372036854775807
(gdb) p $bb/(12*30*24*60*60)         # 使用64位可以表示2965亿年的时间戳
$11 = 296533308798
(gdb)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++17并行算法与HIPSTDPAR

C17 parallel algorithms and HIPSTDPAR — ROCm Blogs (amd.com) C17标准在原有的C标准库中引入了并行算法的概念。像std::transform这样的并行版本算法保持了与常规串行版本相同的签名&#xff0c;只是增加了一个额外的参数来指定使用的执行策略。这种灵活性使得已经使用C标准…

AI 音乐大模型:创新的曙光还是创意产业的阴影?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

[面试题]Kafka

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

RAG(检索增强生成)的演变:初级 RAG、高级 RAG 和模块化 RAG 架构

大型语言模型&#xff08;LLMs&#xff09;通过在自然语言任务及其它领域的成功应用&#xff0c;如 ChatGPT、Bard、Claude 等所示&#xff0c;已经彻底改变了 AI 领域。这些 LLMs 能够生成从创意写作到复杂代码的文本。然而&#xff0c;LLMs 面临着幻觉、过时知识和不透明、无…

基于ChatGPT的大型语言模型试用心得

近年来&#xff0c;ChatGPT这样的大型语言模型&#xff0c;它如同一颗冉冉升起的新星&#xff0c;迅速在商业、教育、娱乐等多个领域照亮了创新的天空&#xff0c;极大地革新了我们的工作与日常生活。 最近我发现一些国内用户也能自由访问的中文ChatGPT APP。这个平台不仅提供…

10招教你玩转Python循环优化

更多Python学习内容&#xff1a;ipengtao.com 在Python编程中&#xff0c;循环是最常见的控制结构之一。尽管Python的循环语法简单明了&#xff0c;但在处理大量数据或进行复杂计算时&#xff0c;循环可能会成为性能瓶颈。本文将介绍10种加速Python循环的方法&#xff0c;帮助在…

[Linux] 系统的基本架构特点

Linux系统的基本结构 Linux is also a subversion of UNIX,it follows the basic structure of UNIX 内核(kernel)&#xff1a; 操作系统的基本部分 管理与硬件相关的功能&#xff0c;分模块进行 常驻模块&#xff1a;进程控制IO操作文件\磁盘访问 用户不能直接访问内核 外壳(s…

数据资产:打破数据孤岛,实现数据互联互通,构建企业智能化转型的重要桥梁。通过高效整合与利用数据资源,推动企业决策的科学化、精准化,助力企业迈向智能化新时代

目录 一、引言 二、数据孤岛现象及其影响 三、打破数据孤岛&#xff0c;实现数据互联互通 1、制定统一的数据标准和管理规范 2、建设统一的数据平台 3、推广数据共享和开放文化 四、数据资产在智能化转型中的重要作用 1、推动企业决策的科学化、精准化 2、优化企业运营…

盘点下常见 HDFS JournalNode 异常的问题原因和修复方法

盘点下常见 HDFS JournalNode 异常的问题原因和修复方法 最近在多个客户现场以及公司内部环境&#xff0c;都遇到了因为 JournalNode 异常导致 HDFS 服务不可用的问题&#xff0c;在此总结下相关知识。 1 HDFS HA 高可用和 JournalNode 概述 HDFS namenode 有 SPOF 单点故障…

【尚庭公寓SpringBoot + Vue 项目实战】移动端项目初始化(十九)

【尚庭公寓SpringBoot Vue 项目实战】移动端项目初始化&#xff08;十九&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端项目初始化&#xff08;十九&#xff09;1、 SpringBoot配置2、Mybatis-Plus配置3、Knife4j配置4、导入基础代码5、导入接口定义代码6…

上海中腾食品科学餐饮管理铸就企业食堂新模式

在当今企业运营中&#xff0c;食堂不仅是员工用餐的场所&#xff0c;更是企业文化和管理水平的体现。随着餐饮行业的不断发展&#xff0c;科学合理的餐饮管理模式成为了企业食堂成功的关键。上海中腾食品科技有限公司以其独特的餐饮管理模式&#xff0c;成功打造了企业食堂的新…

CSS3中鲜为人知但非常强大的 Clip-Path 属性

CSS3中鲜为人知但非常强大的 Clip-Path 属性 在CSS3中,clip-path属性可以让我们快速创建各种各样的不规则图形,而无需使用图片或者复杂的绘图工具。它可以帮助我们实现一些非常出色的视觉效果,但遗憾的是它并不是很常见。 clip-path属性可以接受多种不同的值,比如polygon()、…

静态网页发送基本请求

目录 一、 发送 GET 请求 1&#xff0e;不携带 url 参数的 GET 请求 2&#xff0e;携带 url 参数的 GET 请求 二、发送 POST 请求 三、处理响应 1&#xff0e;获取网页源代码 2&#xff0e;获取图片 一、 发送 GET 请求 当用户在浏览器的地址栏中直接输入某个 URL 地址…

海量数据处理利器 Roaring BitMap 原理介绍

作者&#xff1a;来自 vivo 互联网服务器团队- Zheng Rui 本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用&#xff0c;分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。 一、引言 在进行大数据开发时&#xff0c;…

公域+私域运营思路框架

本次分享公域私域运营思路框架&#xff0c;内容包括私域原则、公域引流、让利思维、价值体系等内容&#xff0c;让你的流量保持高留存、高活跃。

idea 创建properties文件,解决乱码

设置properties文件编码 点击file->Settings File Encodings->设置utf-8 重新创建.properties文件才生效

【Java学习笔记】异常处理

生活中我们在使用一些产品的时候&#xff0c;经常会碰到一些异常情况。例如&#xff0c;使用ATM机取钱的时&#xff0c;机器会突然出现故障导致无法完成正常的取钱业务&#xff0c;甚至吞卡&#xff1b;在乘坐地铁时&#xff0c;地铁出现异常无法按时启动和运行&#xff1b;使用…

本科且非专业学历|艺术自由职业者成功赴美国威斯康星大学麦迪逊分校自费访学

R老师只有本科学历且不是艺术专业&#xff0c;但有独创的艺术作品&#xff0c;其希望在一年的访问学者期间&#xff0c;拓宽艺术视野&#xff0c;同时学习艺术理论&#xff0c;以弥补学术背景薄弱的短板。最终我们为其落实了美国威斯康星大学麦迪逊分校访问学者职位。 R老师背景…

IAR stack usage

c - IAR Stack Usage for STM32 in the map File - Stack Overflow

SAP FICO 下载文件报错【调用数据提供商错误】

报错如下图所示&#xff1a; 解决办法&#xff1a; 当弹出保存文件的提示时&#xff0c;不要点击“记住我的决定”