Linuxファイル記述子が解放されているかどうかを確認する方法

     ソケット、テキストファイル、db、フラッシュなど、すべてがLinuxプログラミングのファイルであるため、特にネットワークプログラミングのサーバー側のソケットでは、3つのハンドシェイクの後、ソケットの処理を忘れることが多く、最終的にはプロセス全体のファイル記述子の消費につながります。 Linuxの書き込みプログラムでは、fdが状況を閉じるのを忘れることが多いため、ファイル記述子の枯渇も発生します。次の方法は、ファイル記述子が閉じるのを忘れたかどうかを確認するのに役立ちます。

 

1)Linuxシステムでは、すべてのプロセスで開くことができるFDの最大数。クエリステートメント:

/ proc / sys / fs / file-max
2)Linuxシステムでは、すべてのプロセスによって開かれたfdsの数と許可される最大数。クエリステートメント:

         [root @ localhost logs]#cat / proc / sys / fs / file-nr

 

2112   0  2100000
割り当てられたファイルハンドルの数  使用されるファイルハンドルの数 ファイルハンドルの最大数 

 

 

 

割り当てられたファイルハンドルの数:ファイル記述子を閉じるのを忘れた場合、この値は増加し続けるため、ストレステストを行う場合はこの状況に特に注意してください。

 

C言語を使用して取得する

       

#include <stdio.h>

typedef struct        
{
    unsigned int assigned;/*已分配文件句柄的数目    */      
    unsigned int used;/*文件句柄的最大数目*/ 
    unsigned int total;/*文件句柄的最大数目*/                       
}system_info_fd_t;

static void ptcp_server_get_sys_fd_info(system_info_fd_t *info_fd) 
{
    FILE *fd;          
    char buff[256];   
    fd = fopen ("/proc/sys/fs/file-nr", "r"); 
    fgets (buff, sizeof(buff), fd); 
    sscanf (buff, "%u    %u    %u", &info_fd->assigned, &info_fd->used,&info_fd->total); 
    fclose(fd);    
}

3)1つのプロセスで開くことができるFDの最大数クエリステートメント:

ulimit -n
4)単一のプロセス(たとえば、対象のプロセスIDが655であることを確認するためにps -auxを使用)がfdに開かれています。クエリステートメント:

ls -l / proc / 655 / fd / | wc -lを実行すると、fdが増加し続けることがわかり、プロセスがファイルの説明を閉じるのを忘れたことを確認できます。

 

 

公開された78のオリジナル記事 32の賞賛 120,000ビュー

おすすめ

転載: blog.csdn.net/caofengtao1314/article/details/104799259
おすすめ