當前位置:首頁 » 編程軟體 » linux內存腳本

linux內存腳本

發布時間: 2022-12-18 18:29:49

Ⅰ 查看linux內存使用情況的shell腳本


linux
中,/proc/$PID/status
文件提供了該進程資源(內存,堆棧,信號量,子父進程)的使用情況,雖然linux提供了不少查看內存的命令,但都是看整體的使用情況,無法對單個進程的內存使用情況進行查看。
本文為大家提供的這個腳本,通過查看status文件中VmRSS的欄位來查看系統或進程使用的內存情況,有需要的朋友不妨參考下。
復制代碼:
#!
/bin/bash
echo
-n
PidName
>
/root/script/pid.f
echo
MeMery
>>
/root/script/pid.f
PIDPATH=/proc/
TOTLE=0
cd
$PIDPATH
DOC=`ls`
for
DOCNAME
in
$DOC
do
if
[
-d
$DOCNAME
];
then
cd
$DOCNAME
if
[
-f
status
];then
MEMERY=`grep
VmRSS
status
|
awk
-F':'
'{print
$2}'
|
awk
'{print
$1}'`
PIDNAME=`grep
Name
status
|
awk
-F':'
'{print
$2}'`
if
[
$MEMERY
];
then
echo
-n
$PIDNAME
>>
/root/script/pid.f
echo
-n
>>
/root/script/pid.f
echo
$MEMERY
>>
/root/script/pid.f
TOTLE=`expr
$TOTLE
+
$MEMERY`
cd
..
else
cd
..
fi
else
cd
..
fi
fi
done
TOTLE=`expr
$TOTLE
/
1024`
echo
TOTLE
USERD:
$TOTLE
MB
>>
/root/script/pid.f
cat
/root/script/pid.f

Ⅱ 求一個耗盡cup耗盡內存資源的linux腳本,為了學習vmstat監控變化用的

1.無限遞歸調用自身

比如腳本的名字是 exhaustResources.sh,那麼就這樣寫:

#!/bin/sh
echo "unlimited recursive call..."
./exhaustResources.sh #call self

在我的UBUNTU上測試了下效果:CPU立刻跳到90%以上,並且以每秒100MB的速度吞噬內存。

注意:運行這個腳本很可能讓電腦失去響應(因為是以大量讀入數據的方式消耗內存)!測試時,可以按Ctrl+C中止腳本運行。

2.空循環
#!/bin/sh
#echo "unlimited cycle"
while [ 1 ]
do
echo "unlimited cycle"
done

這個腳本只能消耗一個CPU的全部資源。多核CPU的其他核心佔用率不會升高。

Ⅲ 如何為linux釋放內存和緩存

在Linux系統下,我們一般不需要去釋放內存,因為系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存佔用掉,導致系統使用SWAP空間影響性能,此時就需要執行釋放內存(清理緩存)的操作了。
Linux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分緩存已經用不到了。這個時候,我們難道只能眼睜睜的看著緩存把內存空間占據掉么?
所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是釋放緩存的操作了。
要達到釋放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數字,代表著不同的含義:
0 – 不釋放
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放所有緩存
知道了參數後,我們就可以根據我們的需要,使用下面的指令來進行操作。
首先我們需要使用sync指令,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。

#sync

接下來,我們需要將需要的參數寫進/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:

#echo 3 > /proc/sys/vm/drop_caches

此指令輸入後會立即生效,可以查詢現在的可用內存明顯的變多了。
要查詢當前緩存釋放的參數,可以輸入下面的指令:

#cat /proc/sys/vm/drop_caches
#free -m

對於清除swap,只有先關閉swap了,用:
#swapoff -a
而後啟用swap,因為只是清除,不是說不要用swap的嘛 :
#swapon -a

http://blog.sina.com.cn/s/blog_539d6e0c0100ys3o.html

Linux 自動釋放內存腳本
發表於119 天前 ? 技術文章 ? 暫無評論

腳本下載地址:Cached
腳本內容:
#! /bin/bash
# cache釋放:
# To free pagecache:
sync
sync
#echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
#echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
# 說明,釋放前最好sync一下,防止丟數據。
利用系統crontab實現每天自動運行:
crontab -e
輸入以下內容:
00 00 * * * /root/Cached.sh
每天0點釋放一次內存,這個時間可以根據自己需要自行設置,我的伺服器情況是每天自動釋放一次就OK了
在設置這個腳本的時候,發生了一系列的問題
在測試運行./Cached.sh時提示錯誤:Permission denied 許可權的問題
解決方法:
chmod +x .Cached.sh

chmod 777 Cached.sh
接著又出現錯誤提示:/bin/bash^M: bad interpreter: No such file or directory
這是因為在windows下編輯的.sh文件編碼格式和linux下不一樣,轉換一下編碼格式即可:
dos2unix Cached.sh
http://blog.sinorain.com/archives/157

Ⅳ linux寫一個查看指定進程佔用CPU和內存情況的腳本

1、查看物理CPU數
[root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
1
2、查看邏輯CPU數
[root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep "processor"|wc -l
4
3、查看CPU幾核(即核數)
[root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep "cores"|uniq
cpu cores : 4
4、查看CPU主頻
[root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep MHz|uniq
cpu MHz : 2499.982
5、前操作系統內核信息
[root@MysqlCluster01 ~]# uname -a
Linux MysqlCluster01 2.6.32-431.20.3.el6.x86_64 #1 SMP Thu Jun 19 21:14:45 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
6、前操作系統發行版信息
[root@MysqlCluster01 ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m
7、內存使用情況
[root@MysqlCluster01 ~]# free -m
total used free shared buffers cached
Mem: 7863 2738 5125 0 141 835
-/+ buffers/cache: 1761 6102
Swap: 3967 0 3967

Ⅳ 提高linux腳本cpu和內存使用率

linuxt提供了系統函數sysconf()用來讀取CPU和內存信息,先來了解一下sysconf()函數吧。

頭文件

#include<unistd.h>

函數原型

long sysconf (int name);

說明

sysconf() 返回選項 ( 變數) 的當前值,這個值可配置的但也是受系統限制的。在成功完成的情況下,sysconf() 返回 變數的當前值。該值受到的限制將少於編譯時 <limits.h>, <unistd.h> 或 <time.h> 中可用的對應值。大多數這些 變數的值在調用進程的生存時間內不變。
如果出錯,那麼函數返回 -1 ,並適當地設置 errno 。當沒有錯誤發生時, -1 也是一個合法的返回值。因此,程序要檢查錯誤,應該在調用 sysconf() 之前將 errno 設置為 0 ,然後,如果返回 -1,則檢驗到錯誤。
參數 name 指定我們感興趣的運行時限制的名字,它必須是以值中之一(除非另有說明,否則返回值都是整數):
_SC_2_C_BIND : 一個布爾值,指出是否支持 POSIX C 語言綁定。返回值是 _POSIX2_C_BIND 。
_SC_2_C_DEV : 一個布爾值,指出是否支持 POSIX C 語言開發使用工具選項。返回值是 _POSIX2_C_DEV 。
_SC_2_C_VERSION : 它指出支持哪一個 ISO POSIX.2 標准 (命令) 的版本。返回值是 _POSIX2_C_VERSION 。
_SC_2_CHAR_TERM : 一個布爾值,指出是否至少支持一個 終端。返回值是 _POSIX2_CHAR_TERM 。
_SC_2_FORT_DEV : 一個布爾值,指出是否支持 FORTRAN 開發使用工具選項。返回值是 POSIX2_FORT_DEV 。
注意:1、 CLK_TCK 的值是可變的,因此,不應該假設它是一個 編譯時間 常量。
2、調用 setrlimit 會使 OPEN_MAX 的值發生改變。
3、 通過將 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,來確定 物理內存的總量 (以 位元組為單位) 可以返回一個值,該值超出 32 位進程中 long 或 unsigned long 可表示的最大值。同樣適用於通過將 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,來確定未使用的 物理內存的總量 (以 位元組為單位)。這個問題有兩個工作區。第 1 個工作區將程序作為 64 位的進程進行編譯 (從而使 long 足夠大到可以容納乘法運算的結果) ,但是,這樣做的缺點是得到的程序只能在 64 位的內核中運行。第 2 個工作區是用來將得到的乘法運算結果存儲在一個 64 位的量中,如 longlong_t (Solaris OS 類型) 或 long long (linux)。它的有點是可以在 32 位和 64 位的內核中正確工作。

熱點內容
壓縮機工作原理圖 發布:2025-07-13 18:10:15 瀏覽:38
黑暗追求者安卓怎麼聯機 發布:2025-07-13 18:10:07 瀏覽:617
北大保安自學編程 發布:2025-07-13 18:09:58 瀏覽:858
java遞歸排列 發布:2025-07-13 18:02:43 瀏覽:473
輕量雲伺服器如何換成d盤 發布:2025-07-13 17:58:45 瀏覽:931
重置騰訊雲伺服器時間 發布:2025-07-13 17:54:55 瀏覽:326
aes256java加密 發布:2025-07-13 17:54:46 瀏覽:709
mc開伺服器的電腦 發布:2025-07-13 17:46:47 瀏覽:195
事件linux 發布:2025-07-13 17:45:51 瀏覽:143
mssqlpython 發布:2025-07-13 17:24:34 瀏覽:469