mpstat 显示时间格式不同问题分析

背景

最近在使用mpstat做数据采集分析的时候,发现mpstat采集的数据格式有2种不同的情况。如下图1、2所示。
图1 mpstat显示不含AM/PM
图1 mpstat显示不含AM/PM

图2 mpstat显示包含AM/PM图2 mpstat显示包含AM/PM
从显示分析看图一与二唯一的差异性就是时间的显示差异性。图一是24小时制,图二是12小时制。为什么会出现这样的情况呢?

原因分析

通过下载源码分析 https://github.com/sysstat/sysstat,发现影响结果的原因是LC_TIME变量的设置。
mpstat源码分析
char *setlocale(int category, const char *locale)
● locale – 如果 locale 是 NULL 或空字符串 “”,则区域名称将根据环境变量值来设置,其名称与上述的类别名称相同。

然后查看系统变量,结果一的locale变量显示
$locale
LANG=en_US.UTF-8
LC_TIME=“C”
LC_ALL=C

结果二的locale变量显示
#locale
LANG=en_US.UTF-8
LC_TIME=“en_US.UTF-8”
LC_ALL=

将结果二的机器的环境变量LC_TIME="en_US.UTF-8"修改为LC_TIME=“C”,最终结果输出一致。

locale说明

在Linux系统,locale命令来设置和显示程序运行的语言环境,locale会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境。
按照如下规则设置:
<语言>_<地区>.<字符集编码><@修正值>
如: zh_CN.UTF-8,zh 表示中文,CN 表示大陆地区,UTF-8 表示字符集
locale涉及到的变量如下: (优先级:LC_ALL > LC_* > LANG)

LANG=en_US.UTF-8 #LANG的优先级是最低的,它是所有LC_*变量的默认值
LC_CTYPE=“en_US.UTF-8” #字符分类和字符串处理,控制字符处理方式,字符编码,是单字节还是多字节
LC_NUMERIC=“en_US.UTF-8” #格式化非货币的数字显示
LC_TIME=en_US.UTF-8 #格式化时间和日期
LC_COLLATE=“en_US.UTF-8” #比较和排序
LC_MONETARY=“en_US.UTF-8” #格式化货币单位
LC_MESSAGES=“en_US.UTF-8” #控制程序输出时所使用的语言
LC_PAPER=“en_US.UTF-8” #默认纸张尺寸大小
LC_NAME=“en_US.UTF-8” #姓名书写方式
LC_ADDRESS=“en_US.UTF-8” #地址书写方式
LC_TELEPHONE=“en_US.UTF-8” #电话号码书写方式
LC_MEASUREMENT=“en_US.UTF-8” #度量衡表达方式
LC_IDENTIFICATION=“en_US.UTF-8” #locale对自身包含信息的概述
LC_ALL= #它不是环境变量,是一个宏,可以通过该变量的设置覆盖所有LC_*变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值