localtime 的效能問題及其替代者

2022-03-04 01:00:04 字數 634 閱讀 3870

在系統從redhat5公升到redhat6的過程中,服務的效能差了很多。經過定位發現是程式中頻繁呼叫localtime/localtime_r所致。

而呼叫localtime_r 的實現中,對時區進行了加鎖,有bug反饋其有切換的效能損耗。

修復服務程式就有兩種思路。

1. 減少localtime_r的呼叫。

2. 尋找localtime_r的替換者。

第一種思路比較簡單,用乙個變數呼叫一次,需要的時候就用該變數即可。

下面談一下第二種思路。我們的系統呼叫localtime_r主要是為了獲取tm結構中的有限幾個域,如時分秒等。我們找到了

《進行日期時間轉換和計算的幾個shell小函式》這樣通過計算得到tm結構的方法,將其翻譯為c++的程式fastsecondtodate,

對於其解釋有一篇博文《乙個精巧的日期差演算法賞析》共參考。

在系統測試中,fastsecondtodate 基本上不耗時,效能有x200以上的提公升。

附 fastsecondtodate的實現

static

int fastsecondtodate(const time_t& unix_sec, struct tm* tm, int

time_zone)

Linux效能優化及效能問題定位

效能優化是什麼?1.1 效能優化就是發揮機器本來的效能 效能的幾個唯度 1.1.1 cpu 命令 vmstat 首先檢查 cpu,cpu 使用率要提公升而不是降低 cpu 空閒並不一定是沒事做,也有可能是鎖或者外部資源瓶頸。命令 top 命令 iostat 命令 free 命令 nicstat 需要...

Mysql 效能優化及問題

檢視 max allowed packet show variables like max allowed packet 以下內容為 mysql根據配置檔案會限制server接受的資料報大小。有時候大的插入和更新會被max allowed packet 引數限制掉,導致失敗。檢視目前配置 varia...

localtime和gmtime函式的區別

c庫函式time t time time t seconds 返回自紀元 00 00 00 utc,1970年1月1日 以來的時間,單位為秒。如果second不是null,則返回值也儲存在變數second中。time t time time t t c庫函式tm localtime const ti...