16進制 ksh_AIX系統中如何統計進程打開的文件數目

作者:李燁楠 中國建設銀行

來自微信公眾號:平臺人生

環境: AIX 6.1 AIX7.1

前言:

用戶有時需要統計一個進程打開的文件數目,比如,在當前打開文件句柄使用量是否超過用戶資源限制(/etc/security/limits)中 nofiles的取值時。那么,AIX系統中該如何實現這一需求呢?如何判斷我們設置的nofiles值對當前應用是否夠用呢?下面我們提供三種方法進行統計。

使用 procfiles 命令

procfiles 命令可以顯示進程打開的所有文件描述符(FD,file descriptor,即代表打開的文件)信息,加上 -n 參數還可以顯示相關文件名稱。

sfmon@localhost>procfiles 51184046

51184046 : -ksh

Current rlimit: 8192 file descriptors

0: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY

1: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY

2: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY

10: S_IFREG mode:0444 dev:10,5 ino:40370 uid:901 gid:900 rdev:0,0

O_RDONLY size:0

63: S_IFREG mode:0600 dev:110,1 ino:5 uid:901 gid:900 rdev:0,0

O_RDWR | O_APPEND size:0

sfmon@localhost>procfiles -n 51184046

51184046 : -ksh

Current rlimit: 8192 file descriptors

0: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY name://dev/pts/0

1: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY name://dev/pts/0

2: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY name://dev/pts/0

10: S_IFREG mode:0444 dev:10,5 ino:40370 uid:901 gid:900 rdev:0,0

O_RDONLY size:0name:/usr/lib/nls/msg/en_US/ksh.cat

63: S_IFREG mode:0600 dev:110,1 ino:5 uid:901 gid:900 rdev:0,0

O_RDWR | O_APPEND size:0name:/home/ap/sfmon/.sh_history

注意,stdin/stdout/stderr都各占一個文件描述符,而且socket也是要占用文件描述符的。

相關知識介紹:proctools系列命令

/proc 文件系統提供了一種控制進程的機制。它還提供了對有關當前進程和線程狀態信息的訪問,不過該信息是二進制格式。/proc 文件系統中每個條目的名稱都是與進程 ID 對應的十進制數字。這些條目是子目錄,每個條目的所有者由進程的用戶 ID 確定。對進程狀態的訪問是由每個子目錄中包含的附加文件提供的。

proctools系列命令(/proc 命令)基于某些可用信息提供 ASCII 報告。其中大多數命令接受進程 ID 列表或 /proc/ProcessID 字符串作為輸入。因此可以使用 Shell 擴展 /proc/* 指定系統中的所有進程。

proctools系列命令從 /proc 中收集指定進程的信息并向用戶顯示該信息。這些命令從 /proc 中收集的信息是當前進程狀態的快照,因此除了已終止的進程外,此信息在任何時刻都會有所不同。

proctools 命令包括:

procfiles 報告有關由進程打開的所有文件描述符的信息。

proctree 打印包含特定進程 ID 或用戶的進程樹。

procsig 列出進程定義的信號操作。

procstack 打印進程中所有線程的十六進制地址和符號名稱。

procrun 啟動在發生 PR_REQUESTED 事件時停止的進程。

procmap 打印進程的地址空間映射。

procflags 打印指定進程中每個線程的 /proc 跟蹤標志、掛起和保持信號以及其他 /proc 狀態信息。

proccred 打印進程的憑據(有效、實際、已保存的用戶 ID 和組 ID)。

procldd 列出進程加載的對象,包括使用 dlopen() 來顯式附加的共享對象。

procwait 等待所有指定的進程終止。

procwdx 打印進程的當前工作目錄。

procstop 在發生 PR_REQUESTED 事件時終止進程。

在生產環境中檢查進程時應該特別小心,特別不建議編入腳本循環執行進行系統監控,因為這些工具在進行檢查時可能會掛起進程。

2.使用pstat命令統計:# pstat -a | grep,

獲得進程的slot ID。 # pstat -u | grep "fd " | wc -l

每個 fd 代表一個打開的文件描述符。

使用方法:

進入kdb,轉換進程號pid至16進制,然后退出kdb。

root>kdb

(0)>dcal 1442240

Value decimal: 1442240 Value hexa: 001601C0

(0)>q

查看同名進程,根據進程號16進制,找到對應的slotID:

root>pstat -a | grepksh

1046a 1601c0 2b01a8 1601c0 0 0 1 ksh

1054 a 1e0142 1d00d4 1e0142 0 0 1 ksh

1056 a 200152 1b0312 1b0312 8 8 1 ksh

3099 a 1b0312 1d00d4 1b0312 0 0 1 ksh

查看打開的文件描述符:

root>pstat -u 1046 | grep "fd "

fd 0: fp = 0xf1000f1e9009c900 flags = 0x0480 count = 0x0000

fd 1: fp = 0xf1000f1e9009c900 flags = 0x0480 count = 0x0000

fd 2: fp = 0xf1000f1e9009c900 flags = 0x0480 count = 0x0000

fd 10: fp = 0xf1000f1e90062900 flags = 0x0481 count = 0x0000

fd 63: fp = 0xf1000f1e90084600 flags = 0x0481 count = 0x0000

統計使用文件描述符數目:

root@xxhjibm0502:/>pstat -u 1046 | grep "fd " | wc -l

5

3.使用lsof命令

如果系統部署安裝了lsof工具,統計一個進程打開的文件數目的工作則更加簡單直接。

root@xxhjibm0502:/>lsof -p 1442240

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

ksh 1442240 root cwd VDIR 10,4 4096 2 / (/dev/hd4)

ksh 1442240 root 0u VCHR 37,0 0t574139 25377 /dev/pts/0

ksh 1442240 root 1u VCHR 37,0 0t574139 25377 /dev/pts/0

ksh 1442240 root 2u VCHR 37,0 0t574139 25377 /dev/pts/0

ksh 1442240 root 10r VREG 10,5 5875 62228 /usr (/dev/hd2)

ksh 1442240 root 63u VREG 10,4 20768 31 / (/dev/hd4)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端Http協議緩存初解

[TOC] 簡介 用戶獲取網絡資源,需要通過非常長的網絡去服務器上請求資源,另外服務端為了應對大量的用戶請求而不斷的提升硬件性能與帶寬。這對用戶與服務端都非常的不友好。而緩存就是為了解決用戶請求速度與釋放服務器壓力而生的。 為什么我會寫Http緩存&#xff0c…

詳解java訪問修飾符

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

educoder 二進制數據的位運算_二進制與位運算實用操作匯總(基礎篇)

位運算是最高效而且占用內存最少的算法操作,但也是最難看懂的操作。然而,關于位運算的用法,筆者查了許多資料,似乎都沒有找到詳細而系統的講解資料。筆者對位運算的操作相當感興趣,因此斗膽嘗試對位運算來一個的總結。…

企業為什么要做SEO,它的重要性有哪些?

對于SEO工作而言,我們知道一個網站做SEO的基礎訴求就是讓用戶和搜索引擎更好的理解網站內容,雖然隨著搜索引擎算法技術的迭代,目前SEO面臨更大的挑戰與競爭,但基于搜索營銷,它目前仍然顯得十分重要。 那么&#xff0…

白話說編程之java線程

白話說編程之java線程線程和進程:進程:線程:線程和進程的區別:詳解多線程:并發為什么使用并發并發的執行原理并行線程的五種狀態:創建狀態:就緒狀態:運行狀態:阻塞狀態:死…

powerdesigner顯示工具面板_photoshop教程-畫筆工具預設與選項設置

定義畫筆預設在打開的“畫筆”面板中,單擊左側的“畫筆筆尖形狀”名稱,可顯示筆尖形狀圖案。單擊“畫筆”面板左側其他不同的選項名稱,在右側就會顯示其對應的調節項。只單擊不同選項前面的方框,可使此選項有效,但右側…

C#屬性的聲明和使用演示源碼片段

工作閑暇時間,將代碼過程重要的一些代碼做個收藏,如下代碼是關于C#屬性的聲明和使用演示片段的代碼,應該對碼農有一些好處。 using System; class Person {private string myName "N/A";private int myAge 0;public string Name{g…

深入理解== 和 equals 的區別

深入理解 和 equals 的本質區別簡介區別:圖解:注意點:源碼分析:總結分享一波:程序員賺外快-必看的巔峰干貨簡介 初學者常常被" “和‘equals ’所折磨,為什么,因為他們的大概意思相同,都是…

rsem比對_RSEM方法比對和表達量計算

分析模塊,封裝了Trinity程序包中的“align_and_estimate_abundance.pl”腳本,進行原始數據與轉錄本序列的比對和表達量計算。其中,核心程序為,Bowtie或Bowtie2進行原始數據與轉錄本序列的比對,RSEM根據比對結果進行表達…

java sleep和wait區別

為什么80%的碼農都做不了架構師?>>> 關于sleep和wait區別解析: sleep只是釋放CPU資源,并不釋放資源鎖對象,wait是會釋放掉資源鎖對象。 比如,有個鎖對象object,線程1和線程2都會鎖住object對象…

u8轉完看不到菜單_web網頁有錯誤,無法看到操作菜單-用友U8

文章摘要:本文提供在用友U8V8.51erp軟件財務會計管理的WEB財務模塊中客戶在使用WEB功能時,沒有使用默認的設置,是將WEB功能設置在自己的網站上面,訪問WEB功能沒有問題,界面出來了,輸入用戶名、密碼、選擇帳…

.Net Core 項目引用本地類庫方式(二)

上篇文章有詳細的介紹.Net Core 項目中引用本地類庫通過打包,然后Nugety引用方式,這里再介紹一種引用包的方式 轉載于:https://www.cnblogs.com/wangshitou/p/10283800.html

深入理解equals和hashCode關系和區別

深入理解equals和hashCode關系和區別直入主題:區別:1.他們判斷對象相同的方式不一樣:2.他們判斷對象是否相等的準確率不一樣:改寫equals時總是要改寫hashcode分享一波:程序員賺外快-必看的巔峰干貨為什么要說equals和hashCode這兩…

lol韓服游戲內設置_韓服LOL進去了還不能玩?教你如何玩韓服!

領取免費韓服LOL安全號,百度搜索韓服LOL微博關注即可!上圖錯誤為常識性錯誤,LOL韓服游戲的安裝文件路徑有中文所導致的錯誤 解決方法:將安裝路徑里的中文改成英文即可 舉例 包含中文漢字的文件夾都是錯誤的 Program FilesLOL韓服 …

Jdk 和 jre 的 關系和區別

Jdk 和 jre 的 關系和區別 區別: JDK:是Java Development Kit 的簡稱–>翻譯過來就是:Java 開發工具包。是程序員使用java語言編寫java程序所需的開發工具包,是提供給程序員使用的。 JRE:是Java Runtime Environm…

OpenCV-Python入門教程7-PyQt編寫GUI界面

前面一直都是使用命令行運行代碼,不夠人性化。這篇用Python編寫一個GUI界面,使用PyQt5編寫圖像處理程序。包括:打開、關閉攝像頭,捕獲圖片,讀取本地圖片,灰度化和Otsu自動閾值分割的功能。 使用Qt Designer…

spark 廣播變量大數據_大數據處理 | Spark集群搭建及基本使用

點擊藍字關注我前面用了一篇文章詳細的介紹了集群HDFS文件系統的搭建,HDFS文件系統只是一個用于存儲數據的系統,它主要是用來服務于大數據計算框架,例如MapReduce、Spark,本文就接著上一篇文章來詳細介紹一下Spark集群的搭建及Spa…

如何將本地項目上傳到gitee

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

oracle dg 備庫未設置convert參數導致ORA-01111,ORA-01110

2019獨角獸企業重金招聘Python工程師標準>>> 查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time Apply MRP0: Back…