Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
一、Linux服務器上文件已刪除但空間沒有釋放原因說明 1、問題說明
查看某臺centos6.7日志服務器發現磁盤空間已經達到100%,刪除存放日志路徑下的文件后,發現空間并未釋放。
2、問題分析
在linux或者Unix系統中,通過rm或者文件管理器刪除文件將會從文件系統的文件夾結構上解除鏈接(unlink).然而假設文件是被打開的(有一個進程正在使用),那么進程將仍然能夠讀取該文件,磁盤空間也一直被占用。
通過命令lsof查看是否有已刪除文件占用空間(lsof +L1或lsof | grep delete)。
從上圖可以看出有大量庫表文件被刪除但仍然在數據庫中運行占用空間,所以導致出現rm刪除文件但磁盤空間未得到釋放的情況,SIZE列為文件占用的空間大小。
3、解決方法
根據上圖可以看出啊占用已刪除文件的進程是數據庫,可以重啟數據庫MySQL來釋放進程,也可以重啟服務器。
如遇到Apache、Tomcat、Nginx 等 Web 服務產生的日志文件,無法在生產環境上重啟,可以選擇在線清空日志的方法echo " " >路徑+日志名
二、lsof命令解析
lsof全名list opened files,也就是列舉系統中已經被打開的文件。在linux環境中,都是以文件形式存放的,設備是文件,文件夾是文件,甚至sockets也是文件。所以,用好lsof命令,它可以顯示系統中所有打開的文件,包括網絡連接、管道、設備、目錄和普通文件等,對日常的linux管理非常有幫助。
基礎命令格式:lsof [options] [names]
1、命令輸出字段解析
lsof是linux最常使用的命令之中的一個,通常的輸出格式為:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
常見包含例如以下幾個字段:
文件描述符FD解析:
cwd current working ;
Lnn library (AIX);
jld jail (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 ;
rtd root ;
tr kernel trace file (OpenBSD);
txt program text (code and data);
v86 VP/ix mapped file;
文件的File 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 Xenix lock on part of the file;
X for an SCO Xenix lock on the entire file;
space if there is no lock.
2、常用的lsof命令選項
下面是一些常用的lsof命令選項:
-a:表示邏輯與,用于指定多個過濾條件之間的關系;
-b:不重新讀取已打開文件的信息,防止系統阻塞;
-c:表示按進程名過濾;
-d:表示按文件描述符過濾;
-D :搜索某個目錄下被打開的文件
-g:表示按組ID過濾;
-i:表示按網絡連接過濾;
-p:表示按進程ID過濾;
-u:表示按用戶ID過濾;
-t:表示只輸出進程ID;
-F:表示指定輸出格式;
-h:表示不顯示列名;
-n:表示不解析主機名;
-P:表示不解析端口號;
-r:表示指定輸出間隔時間;
-s:表示按文件大小過濾;
-T:表示指定輸出格式。
3、lsof常見用法舉例
要列出所有打開的文件,可以使用以下命令:
lsof
要列出指定進程打開的文件,可以使用以下命令:
lsof -p <指定進程pid>
要列出指定用戶打開的文件,可以使用以下命令:
lsof -u
要列出指定文件名的進程,可以使用以下命令:
lsof
要列出指定端口號的進程,可以使用以下命令:
lsof -i :
要列出指定目錄下打開的文件,可以使用以下命令:
lsof
要列出刪除但磁盤空間未釋放的文件,可以使用以下命令:
lsof | grep delete
lsof +L1
要列出某個進程打開的文件,可以使用以下命令:
lsof -c 進程名
要列出按照文件夾/home/oracle來搜尋,但不會打開子文件夾,用來顯示文件夾下被進程開啟的文件,可以使用以下命令:
lsof +d /home/oracle
COMMAND? PID?? USER?? FD?? TYPE DEVICE SIZE???? NODE NAME
tnslsnr 3520 oracle? cwd??? DIR? 253,5 4096 11059201 /home/oracle
要列出打開/home/oracle文件夾以及其子文件夾搜尋,用來顯示文件夾下被進程開啟的文件,可以使用以下命令:
lsof +D /home/oracle
除了以上常用的選項外,lsof還支持很多其他的選項,可以通過man lsof命令查看完整的幫助文檔。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。