日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【linux】free 命令显示 swap 信息异常处理

發布時間:2024/3/24 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【linux】free 命令显示 swap 信息异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 問題原因:
      • 為什么出現這么大的值?
      • 為什么會發生 swap free 大于 swap total 的現象?
    • 解決方案:
    • 實踐:
      • 1. 啟用交換分區
      • 2. 增加交換分區使用頻率
      • 3. 編寫一個內存代碼 `munch.c`
      • 4. 編譯
      • 5. 執行
      • 6. 查看內存
      • 7. 修改交換分區使用頻率
    • 總結:
    • 錯誤:
    • 參考:

前言

今天發現有臺服務swap分區數據顯示異常,使用free -g 命令查看內存使用情況,swap 的 used 遠遠超過 swap total 的值, free 的值也大于 total, 如下所示:

[root@dx-selk00 ~]# free -gtotal used free shared buffers cached Mem: 125 125 0 0 0 40 -/+ buffers/cache: 83 42 Swap: 0 1717986918 3

可以看到交換分區使用明顯是不正常的,并且使用swapon/swapoff 命令也并不能解決問題!

使用swapon -a

使用swapoff -a

可以看到使用swapon/swapoff 命令也并不能解決問題!

問題原因:

為什么出現這么大的值?

通過查看 free 命令的源代碼說明: https://github.com/mmalecki/procps/

free.c 文件關于 swap 信息的代碼:

22 #define S(X) ( ((unsigned long long)(X) << 10) >> shift) ... ... 38 int shift = 10; ... ... 100 printf( 101 "%-7s %10Lu %10Lu %10Lu\n", "Swap:", 102 S(kb_swap_total), 103 S(kb_swap_used), 104 S(kb_swap_free) 105 );

追蹤 kb_swap_used 到 proc/sysinfo.c 文件的代碼:

41 #define MEMINFO_FILE "/proc/meminfo" ... 589 FILE_TO_BUF(MEMINFO_FILE,meminfo_fd); ... 621 kb_swap_used = kb_swap_total - kb_swap_free; 622 kb_main_used = kb_main_total - kb_main_free;

從代碼來看 free 命令是通過讀取 /proc/meminfo 的信息來顯示內存及 swap 的使用, 通過 free -m 函數可以看到 free 大于 total 的總量, 在這里的話 X 即為負數 -2752, 在宏定義函數 S 中, 將 X 強制轉換為64位的無符號整形, 表達式 (unsigned long long) (X) 等效于 2^64 - 2752 , 計算出結果后左移 10 位再右移 10(shift 值) 位, 得出結果 18014398509479232.

為什么會發生 swap free 大于 swap total 的現象?

在 kernel-2.6.32-573.7.1 版本之前, 函數 get_swap_page 在加鎖的過程中去掉了自旋鎖 swap_lock, 這可能會引起 nr_swap_pages 檢測異常使得 /proc/meminfo 記錄失效的 swapfree 數值, 由此可能引起 swapfree 大于 swaptotal 的現象. 詳見: RHBA-2015-1827.html bug 說明

  • A previous change in the get_swap_page() locking removed the use of the
    swap_lock spinlock. This could cause nr_swap_pages corruption and invalid
    SwapFree information in the /proc/meminfo file, where the size of SwapFree could
    exceed the size of SwapTotal. This update uses an atomic variable for
    nr_swap_pages, and the size of SwapFree in /proc/meminfo is now correct.
    (BZ#1259362)

解決方案:

上述問題的原因在于 kernel 方面的 bug 而引起, 所以要永久杜絕該現象可以升級內核到 2.6.32-573.7.1 版本, 重啟后即可生效; 如果不升級 kernel 的話, 只是簡單的 swapoff/swapon 是不能讓結果正常顯示的, 因為 swap 的使用未見變化。

  • 臨時解決方案: 重啟
  • 永久解決方案:升級內核
  • 占用部分 swap 空間就可以使 free 顯示正常

由于這臺服務器上部署的服務比較多,切服務比較重要,索引重啟機器和升級內核的方案不能使用。于是選擇使用第三種方案:

實踐:

1. 啟用交換分區

因為我們需要占用部分 swap 空間,所以第一步打開交換分區。

swapon -a

2. 增加交換分區使用頻率

增加交換分區的使用頻繁,這樣使我們的內存程序能夠更好的使用交換分區的空間。

echo 60 > /proc/sys/vm/swappiness

3. 編寫一個內存代碼 munch.c

代碼的功能是會盡可能多地占用內存,或者達到指定的限制

vim /tmp/munch.c

代碼內容如下:

#include <stdlib.h> #include <stdio.h> #include <string.h>int main(int argc, char** argv) {int max = -1;int mb = 0;char* buffer;if(argc > 1)max = atoi(argv[1]);while((buffer=malloc(1024*1024)) != NULL && mb != max) {memset(buffer, 0, 1024*1024);mb++;printf("Allocated %d MB\n", mb);}return 0; }

4. 編譯

編譯c程序

gcc munch.c -o munch

5. 執行

./munch 或者./munch 60000

這塊根據自己的服務器配置來寫,我這里讓程序去占用60G內存,這樣可能用到swap 分區。

6. 查看內存

這里建議開啟兩個終端窗口,一個用來執行代碼,一個用來查看內存情況。

free -g

可以看到swap分區已經顯示正常了。

7. 修改交換分區使用頻率

echo 1 > /proc/sys/vm/swappiness

這里有個注意點,當swap分區顯示正常后,如果我們再次關閉交換分區,那個這個異常問題還是會復現,所以在這里就不關閉交換分區了,只是調小交換分區的使用頻繁。

總結:

在內存急速被占盡的情況下, 由于舊版本 kernel 的函數處理可能會引起該問題的發生, 進而造成 /proc/meminfo 數據信息的異常, 最后導致 free 命令的錯誤. 如果要杜絕該現象, 需要將 kernel 升級到 kernel-2.6.32-573.7.1 版本. 另外也應該盡量避免運行急速消耗內存的進程.

錯誤:

問題一:
在編譯c程序時,報gcc commands not found。

出現以上問題的原因是系統沒有安裝gcc編譯器所以需要安裝,可以使用yum源進行安裝;

yum -y install gcc+ gcc-c++

參考:

  • https://blog.arstercz.com/free-%E5%91%BD%E4%BB%A4%E6%98%BE%E7%A4%BA-swap-%E4%BF%A1%E6%81%AF%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/
  • https://www.linuxatemyram.com/play.html

總結

以上是生活随笔為你收集整理的【linux】free 命令显示 swap 信息异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一本色道久久综合无码人妻 | 韩国伦理片在线观看 | 热久久在线 | 91人妻一区二区三区蜜臀 | 亚洲特黄 | 超碰人人cao | 奇米第四色首页 | 亚洲天堂av女优 | 免费荫蒂添的好舒服视频 | 国产欧美日韩一区二区三区 | 色妻av| 一色屋免费视频 | 成人精品视频一区二区 | 日韩欧美国产亚洲 | 亚洲人免费视频 | 人妻激情文学 | 久久综合国产 | 偷拍视频久久 | 成人毛片观看 | 99久久99久久精品国产片果冰 | 日韩在线视频网址 | 99er热精品视频 | 国产偷v| 九九资源网 | 亚洲 欧美 自拍偷拍 | 女人张开双腿让男人捅 | 精品一区二区在线视频 | 久久视奸 | 在线h网站| 国产69精品久久久 | av无码久久久久久不卡网站 | 91久久综合精品国产丝袜蜜芽 | 色偷偷av| 爱啪啪影视 | 狠久久| 波多野结衣片子 | 久久精品天天中文字幕人妻 | 亚洲精品一二三四 | v888av| 高清av网| 一区二区自拍偷拍 | 亚洲av无码乱码国产精品久久 | 波多野结衣在线影院 | 欧美日韩亚洲国产综合 | 搡国产老太xxx网站 高h喷汁呻吟3p | 久久99久| 亚洲三区在线播放 | 久久一级电影 | 午夜av免费在线观看 | 中文字幕亚洲一区二区三区五十路 | 久久不射网站 | 午夜视频在线观看一区二区 | 2018av| 美女脱衣服一干二净 | 美女黄色免费网站 | 激情二区 | 国产激情自拍视频 | 波多野结衣精品视频 | 欧美激情视频一区二区三区不卡 | 欧美久久久影院 | 国产一区二区免费电影 | 五月天久久久久 | 色视频线观看在线播放 | 久久久亚洲成人 | 美女流白浆视频 | 人人妻人人澡人人爽欧美一区双 | 欧美三区在线观看 | 肌肉猛男裸体gay网站免费 | 亚洲同性gay激情无套 | 狠狠干狠狠插 | 蜜桃传媒一区二区亚洲 | 国产无码精品一区二区 | 河北彩花av在线播放 | 免费黄色小网站 | 亚洲性片 | 少妇乱淫36部 | 久久激情网站 | 亚洲日本免费 | 久久久久久蜜桃 | 日本三区视频 | 国产做受视频 | 小俊大肉大捧一进一出好爽 | 亚洲av久久久噜噜噜熟女软件 | 无码人妻精品一区二区蜜桃视频 | 神马电影久久 | 清纯唯美第一页 | 精品乱子伦一区二区三区 | 精品欧美一区二区三区久久久 | 欧美日韩经典 | 久久噜噜噜精品国产亚洲综合 | 人妻精品无码一区二区 | 美国一级特黄 | 日日骚网| 日韩福利在线视频 | 黄色网址链接 | 小说肉肉视频 | 午夜电影福利网 | 汗汗视频 | 亚洲精品av中文字幕在线在线 |