1. 程式人生 > >記CentOs伺服器記憶體使用滿的解決辦法

記CentOs伺服器記憶體使用滿的解決辦法

使用的一個應用伺服器,weblogic部署,nginx分配,在使用了半個月的時間裡,伺服器記憶體達到

殺掉伺服器程序之後

檢視被刪除但是仍然被應用程式佔用的檔案列表

由於我刪掉了日誌裡所以東西,所以導致後來我又得使用了一個命令

由於我刪了日誌裡的ngnix.pid 但是我刪除的只是結尾log日誌呀,不知道怎麼就把pid結尾檔案刪除了,奇怪

反正就報這個錯“/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)”

最後 使用(啟動程式碼)nginx -c的引數指定nginx.conf檔案的位置,但是又發現它報“nginx: [emerg] still could not bind()”

發現是因為nginx服務埠被佔用,所以無法啟動

檢視程序號,殺掉服務,注意殺掉管理者服務master

最後就是啟動nginx服務了,先 啟動程式碼格式:nginx安裝目錄地址 -c nginx配置檔案地址

reload即可,記憶體使用率也下降了


最後再總結下:

記憶體使用率就算刪掉一些日誌資訊,但也還是居高不下,是因為

未釋放磁碟空間原因:

在Linux或者Unix系統中,通過rm或者檔案管理器刪除檔案將會從檔案系統的目錄結構上解除連結(unlink).然而如果檔案是被
開啟的(有一個程序正在使用),那麼程序將仍然可以讀取該檔案,磁碟空間也一直被佔用。而我刪除的是oracle的告警log檔案
刪除的時候檔案應該正在被使用

學習下lsof命令

lsof全名list opened files,也就是列舉系統中已經被開啟的檔案。我們都知道,linux環境中,任何事物都是檔案,
裝置是檔案,目錄是檔案,甚至sockets也是檔案。所以,用好lsof命令,對日常的linux管理非常有幫助。

lsof是linux最常用的命令之一,通常的輸出格式為:

引用
COMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME

常見包括如下幾個欄位:更多的可見manual。

1COMMAND
預設以9個字元長度顯示的命令名稱。可使用+c引數指定顯示的寬度,若+c後跟的引數為零,則顯示命令的全名
2

PID:程序的ID
3PPID
父程序的IP號,預設不顯示,當使用-R引數可開啟。
4PGID
程序組的ID編號,預設也不會顯示,當使用-g引數時可開啟。
5USER
命令的執行UID或系統中登陸的使用者名稱稱。預設顯示為使用者名稱,當使用-l引數時,可顯示UID。
6FD
是檔案的File Descriptor number,或者如下的內容:
(這裡很難翻譯對應的意思,保留英文)

引用
cwd  current working directory;
Lnn  library references (AIX);
jld  jail directory (FreeBSD);
ltx  shared library text (code and data);
Mxx  hex memory-mapped type number xx.
m86  DOS Merge mapped file;
mem  memory-mapped file;
mmap memory-mapped device;
pd   parent directory;
rtd  root directory;
tr   kernel trace file (OpenBSD);
txt  program text (code and data);
v86  VP/ix mapped file;

檔案的File Descriptor number顯示模式有:

引用
r for read access;
w for write access;
u for read and write access;
N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part  of the file;
X  for an SCO OpenServer Xenix lock on the entire file;
space if there is no lock.

7TYPE

引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也會顯示為IPv6,而對映到IPv6的地址;
DIR 目錄
LINK 連結檔案

詳情請看manual中更多的註釋。

8DEVICE
使用character special、block special表示的裝置號
9SIZE
檔案的大小,如果不能用大小表示的,會留空。使用-s引數控制。
10NODE
本地檔案的node碼,或者協議,如TCP等
11NAME
掛載點和檔案的全路徑(連結會被解析為實際路徑),或者連線雙方的地址和埠、狀態等

常用示例:

1.顯示開啟檔案/home/oracle/10.2.0/db_1/bin/tnslsnr的程序

[[email protected] ~]# lsof /home/oracle/10.2.0/db_1/bin/tnslsnr
COMMAND  PID   USER  FD   TYPE DEVICE   SIZE     NODE NAME
tnslsnr 3520 oracle txt    REG  253,5 431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr

2.知道22埠現在執行什麼程式

[[email protected] ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE NODE NAME
sshd    3101 root    3u  IPv6    8670       TCP *:ssh (LISTEN)
sshd    4545 root    3u  IPv6 4237972       TCP 203.aibo.com:ssh->win-avbmq9e8ka7.gdgg.local:nsjtp-ctrl (ESTABLISHED)

3.顯示init程序現在開啟的檔案

[[email protected] ~]# lsof -c init
COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
init      1 root  cwd    DIR  253,0    4096      2 /
init      1 root  rtd    DIR  253,0    4096      2 /
init      1 root  txt    REG  253,0   43496 524446 /sbin/init
init      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so
init      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
init      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1
init      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
init      1 root   10u  FIFO   0,16           2311 /dev/initctl

4. 看程序號為1的程序打開了哪些檔案

[[email protected] ~]# lsof -p 1
COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
init      1 root  cwd    DIR  253,0    4096      2 /
init      1 root  rtd    DIR  253,0    4096      2 /
init      1 root  txt    REG  253,0   43496 524446 /sbin/init
init      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so
init      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
init      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1
init      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
init      1 root   10u  FIFO   0,16           2311 /dev/initctl

5. 顯示歸屬3520的程序情況

[[email protected] ~]# lsof -g 3520
COMMAND  PID PGID   USER   FD   TYPE             DEVICE      SIZE     NODE NAME
tnslsnr 3520 3520 oracle  cwd    DIR              253,5      4096 11059201 /home/oracle
tnslsnr 3520 3520 oracle  rtd    DIR              253,0      4096        2 /
tnslsnr 3520 3520 oracle  txt    REG              253,5    431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr
tnslsnr 3520 3520 oracle  mem    REG              253,0    130448   917826 /lib64/ld-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0   1678480   917827 /lib64/libc-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0     23520   917686 /lib64/libdl-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0    615136   917834 /lib64/libm-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0    141208   917829 /lib64/libpthread-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0    109824   917839 /lib64/libnsl-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,5  20706622 11405436 /home/oracle/10.2.0/db_1/lib/libclntsh.so.10.1
tnslsnr 3520 3520 oracle  mem    REG              253,5   3803097 11410641 /home/oracle/10.2.0/db_1/lib/libnnz10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5     83493 11407251 /home/oracle/10.2.0/db_1/lib/libons.so
tnslsnr 3520 3520 oracle  mem    REG              253,0     53880   917532 /lib64/libnss_files-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,5      8545 11407615 /home/oracle/10.2.0/db_1/lib/libskgxn2.so
tnslsnr 3520 3520 oracle  mem    REG              253,5    513705 11410332 /home/oracle/10.2.0/db_1/lib/libocrutl10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5    636161 11410330 /home/oracle/10.2.0/db_1/lib/libocr10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5    657825 11410331 /home/oracle/10.2.0/db_1/lib/libocrb10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5   1745769 11410365 /home/oracle/10.2.0/db_1/lib/libhasgen10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5     61985 11410366 /home/oracle/10.2.0/db_1/lib/libclsra10.so
tnslsnr 3520 3520 oracle    0u   CHR                1,3               2553 /dev/null
tnslsnr 3520 3520 oracle    1u   CHR                1,3               2553 /dev/null
tnslsnr 3520 3520 oracle    2u   CHR                1,3               2553 /dev/null
tnslsnr 3520 3520 oracle    3w   REG              253,5 318853012 11633459 /home/oracle/10.2.0/db_1/network/log/listener.log
tnslsnr 3520 3520 oracle    4r  FIFO                0,6              15661 pipe
tnslsnr 3520 3520 oracle    5r   REG              253,5     11776 11410579 /home/oracle/10.2.0/db_1/network/mesg/nlus.msb
tnslsnr 3520 3520 oracle    6r   REG              253,5     46592 11407160 /home/oracle/10.2.0/db_1/network/mesg/tnsus.msb
tnslsnr 3520 3520 oracle    7w  FIFO                0,6              15662 pipe
tnslsnr 3520 3520 oracle    8u  IPv4              15665                TCP 203.aibo.com:ncube-lm (LISTEN)
tnslsnr 3520 3520 oracle    9u  unix 0xffff81021b7d6980              15666 /var/tmp/.oracle/s#3520.1
tnslsnr 3520 3520 oracle   10u  unix 0xffff81021b7d66c0              15668 /var/tmp/.oracle/s#3520.2

6.依照資料夾/home/oracle來搜尋,但不會開啟子目錄,用來顯示目錄下被程序開啟的檔案

[[email protected] ~]# lsof +d /home/oracle
COMMAND  PID   USER   FD   TYPE DEVICE SIZE     NODE NAME
tnslsnr 3520 oracle  cwd    DIR  253,5 4096 11059201 /home/oracle

7. 開啟/home/oracle資料夾以及其子目錄搜尋,用來顯示目錄下被程序開啟的檔案

[[email protected] ~]# lsof +D /home/oracle

顯示內容太多了,不顯示了

8. lsof -i 用以顯示符合條件的程序情況

語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

46 --> IPv4 or IPv6

protocol --> TCP or UDP

hostname --> Internet host name

hostaddr --> IPv4位置

service --> /etc/service中的 service name (可以不只一個)

port --> 埠號 (可以不只一個)

例:

[[email protected] ~]# lsof -i [email protected]:1521 -n
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
oracle  15633 oracle   16u  IPv4 4069605       TCP 192.168.2.203:31580->192.168.2.245:ncube-lm (ESTABLISHED)

[[email protected] ~]# lsof -i [email protected]:1521 
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
oracle  15633 oracle   16u  IPv4 4069605       TCP 203.aibo.com:31580->192.168.2.245:ncube-lm (ESTABLISHED)

lsof -n 不將IP轉換為hostname,預設是不加上-n引數

9. 顯示某使用者的已經開啟的檔案(或該使用者執行程式已經開啟的檔案)

[[email protected] ~]# lsof -u oracle

[[email protected] ~]# lsof -u 0


10. 僅列印程序,方便shell指令碼呼叫

[[email protected] ~]# lsof -tc sshd
3101
4545

關注:

程序除錯命令:truss、strace和ltrace

程序無法啟動,軟體執行速度突然變慢,程式的"SegmentFault"等等都是讓每個Unix系統使用者頭痛的問題,而這些問題都可以通過使用truss、strace和ltrace這三個常用的除錯工具來快速診斷軟體的"疑難雜症"。

2.重啟Ngin服務

方法一:進入nginx可執行目錄sbin下,輸入命令./nginx -s reload即可

方法二:查詢當前nginx程序號,然後輸入命令:kill -HUP 程序號 實現重啟nginx服務


(結合網上各種大神加上自己親身經歷,以供大家學習,如有問題,歡迎討論)

轉自:http://www.centoscn.com/CentosBug/osbug/2015/0204/4633.html

相關推薦

CentOs伺服器記憶體使用滿解決辦法

使用的一個應用伺服器,weblogic部署,nginx分配,在使用了半個月的時間裡,伺服器記憶體達到 殺掉伺服器程序之後 檢視被刪除但是仍然被應用程式佔用的檔案列表 由於我刪掉了日誌裡所以東西,所以導致後來我又得使用了一個命令 由於我刪了日誌裡的ngnix.pid

CentOS 有線無法上網 解決辦法 AR8161安裝

linux網卡驅動如果你的電腦安裝了CentOS後無法用有線上網,那麽就請執行這個命令:lspci | grep -i eth我 的終端顯示的結果為:02:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 08)接著

DB2日誌滿解決辦法

例如 操作 解決辦法 rim cfg 需要 con 執行 數值 在執行一個大SQL事務時,DB2有時候會報出錯誤: The transaction log for the database is full.. SQLCODE=-964, SQLSTATE=57011, DR

VS2015 IIS Express Web伺服器無法啟動解決辦法

1.執行和除錯vs2015專案 提示無法執行專案,開啟vs2013專案發現可以正常執行,所以推測試vs2015專案配置有問題。 2.找到專案啟動項中 .csproj檔案,定位到<WebProjectProperties>,把關於IIS的配置<DevelopmentServer

常見View特別是WebView引發記憶體洩漏解決辦法

記憶體洩漏是安卓開發中常見的一種情況,其原因本質上是一個生命週期更長的物件持有了一個本該回收物件的引用,幾種具體的表現已經有很多部落格進行了分析,比如全域性/單例物件,集合,內部類,執行緒,資源物件等等。然而,還有一類洩漏,往往是View相關的原始碼層造成的洩漏: 比如當一個

J2EE專案記憶體溢位解決辦法總結

提示:Caused by: java.lang.OutOfMemoryError: PermGen space 前段時間,發現專案記憶體溢位了。apache+tomcat叢集。解決辦法如下: 1.  用jprofile工具查詢專案情況。或者用JDK自帶的工具。如:jcon

Tomcat記憶體溢位解決辦法

如果是eclipse記憶體溢位引起的錯誤,修改eclipse.ini檔案如下: -Xms128M -Xmx512M -XX:PermSize=512M -XX:MaxPermSize=1024m 如果是tomcat記憶體溢位引起的錯誤,加上這個引數 -Xms256M -

tensorflow-gpu 和cpu使用訓練ssd模型感想(顯示卡記憶體不足解決辦法)

   ssd 模型對於GPU ,CPU來說都適用,但是通過我的訓練de'd得到的一下經驗來說,GPU訓練時基本不到1秒每步,而cpu在使用avx2的基礎上,訓練的每步需要將近1分鐘,可想而知GPU訓練是cpu訓練的60倍左右,這將大大提高大家的訓練速度。   而且,之前我y

客戶端訪問不到伺服器Oracle的解決辦法

1.telnet 伺服器IP(192.168.1.120) Oracle埠號(1521);若連線成功檢查資料庫本身問題,若連線不通執行下述步驟;2.命令列執行netstat -a –n,檢視1521埠是否處於監聽狀態; ① 若沒有處於監聽狀態先啟動監聽:     【命令列

Android中使用HttpConnection傳送中文到伺服器端亂碼解決辦法

最近在寫一個簡單地案例,是將二維碼掃描的資訊傳送到伺服器端,並存儲到資料庫。以前的測試都是用英文,沒出什麼問題,今天試了一下中文,卻發現傳到伺服器端的全是亂碼。 解決步驟: 1、伺服器端是用PHP來寫,所以在保證檔案儲存為utf-8格式的前提下,在加上頭宣告

IDEA記憶體溢位解決辦法

1、不要通過idea.exe啟動,而是通過idea64.exe啟動IDEA 2、修改引數檔案為idea.exe.vmoptions 原檔案為: -server -Xms128m -Xmx102

UIWebView記憶體洩漏解決辦法(一)

UIWebView的記憶體問題,其實在iOS7以前就一直存在,但是由於webView載入的內容,程式設計師是無法控制的,所以一直沒有一個很好的解決辦法。最近,公司的專案也要做有關與h5的互動。所以,會大量使用UIWebView,為了防止記憶體洩漏,而造成程式閃退問題,所以,還是需要解決這個問題:研究了一段,流

iOS開發之Xcode的靜態分析(Static Code Analysis)與常見記憶體隱患解決辦法

一.Xcode Analyze靜態分析 Static Code Analysis Static Code Analysis(靜態程式碼分析)用來發現原始碼潛在的錯誤與缺陷,原始碼編譯後只有在執行時有可能會產生細微的錯誤,他們可能難以識別和修復,所以這些潛在的威脅

apache httpd佔用記憶體解決辦法

我用2048M的aliyun 伺服器,訪問量不大,但記憶體佔用很大,使用free -h命令檢視: 使用ps -aux | sort -k4nr | head -10命令檢視記憶體佔用前10的程序,發現是httpd伺服器開啟的執行緒太多,同時每個執行緒的記憶體佔用較大:

記憶體溢位解決辦法

eclipse->preference->java->Installed JREs->選擇JDK->edit -> Default VM Arguments: 增加

webview 記憶體洩露解決辦法

最近開始使用leakCanary為app進行記憶體洩露的檢測 遇到了webview.mContext導致activity記憶體洩露 (不過在android 6.0的機子上沒有遇到這樣的問題) 經過搜尋,在http://bugly.qq.com/bbs/forum.php

內部伺服器錯誤。”解決辦法

建站時遇到如下頁面錯誤:解決辦法:    開啟計算機管理IIS後,展開網站,點選出現錯誤的具體網站->"高階設定"->"物理路徑憑據",在彈出的對話方塊中檢視路徑憑據是不是選擇在"特定使用者",如果是請改成" 應用程式使用者(通過身份驗證)(A) ",點選確定。

不能正常訪問公司伺服器共享檔案解決辦法【windows 10】

1、鍵入win+R啟動“執行” 2、輸入伺服器地址後回車彈出視窗提示不能訪問 解決辦法: 此問題需要修改Win10 網路策略 按window+R鍵輸入gpedit.msc 來啟動本地組策略編輯器。 依次找到“計算機配置->管理模板->

CentOS 有線無法上網 解決辦法 網絡卡驅動安裝

By:Ailson Jack Date:2014.04.21 注:本文參考了網上相關資料,且通過了本人的嘗試。 如果你的電腦安裝了CentOS後無法用有線上網,那麼就請執行這個命令: lspci| grep -i eth 我的終端顯示的結果為:02:

Linux/Centos伺服器頻寬異常跑滿的排查解決辦法

客服反饋伺服器頻寬滿。之前每天10M就夠了,現在20/30都不夠,而且是升級到多少,就滿多少,包括晚上3/4點都是一直滿。 首先需要確定是哪一張網絡卡的頻寬跑滿 可以通過sar -n DEV 1 5命令來獲取網絡卡級別的流量圖,命令中 1 5 表示每一秒鐘取 1 次值,一