修復vty_close未關閉配置文件句柄導致句柄數太多,引發系統異常問題
如何判斷是配置文件句柄數太多 引發系統異常問題
【日志表現】 LOG中打印表現
too many open files
【排查進程】
先使用ps查看當前正在進行的進程,取一個個PID進行查看,判斷是哪一個句柄未釋放導致當前的系統異常問題
正常的進程句柄釋放情況如下
【異常進程】
當前有較多句柄未被關閉,判斷為當前的進程異常
可以看到上面藍色的字 表示的為 句柄
****句柄小知識*****
在windows中,句柄是一個32位的整數,是內存中維護的一個對象的地址列表的整數索引,這些對象包括:窗口(window)、塊(module)、任務(task)、實例 (instance)、文件(file)、內存塊(block of memory)、菜單(menu)、控制(control)、字體(font)、資源(resource),包括圖標(icon),光標 (cursor),字符串(string)等、GDI對象(GDI object),包括位圖(bitmap),畫刷(brush),元文件(metafile),調色板(palette),畫筆(pen),區域(region),以及設備描述表(device context)。
在Linux中,每一個進程都由task_struct 數據結構來定義,即PCB,進程通過PCB中的文件描述符表找到文件描述符fd所指向的文件指針filp,內核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。文件描述符表是一個指針數組,每一個元素都指向一個內核的打開文件對象,而fd,就是這個表的下標。當用戶打開一個文件時,內核會在內部生成一個打開文件對象,並在這個表里找到一個空項,讓這一項指向生成的打開文件對象,並返回這一項的下標作為fd,Linux中的文件描述符類似於Windows下文件句柄的概念,但區別是Windows的文件句柄是一個全局的概念,而Linux下文件句柄的作用域只在本進程空間,其中0(標准輸入)、1(標准輸出)、2(標准錯誤)是每一個進程中相同的文件描述符,由操作系統規定好,文件描述符所指向元素的文件指針為struct file結構體,在系統中是一個全局的指針。