一,什么情况下,会新建和打开文件:1,A JVM opens many files in order to read in the classes required to run your application.
High volume applications can use a lot of files in many ways.
2,each new socket requires a file. Clients and Servers communicate via TCP sockets.
3,Each browser's http request consumes TCP sockets when a connection is established to a Server.
二,文件描述符的释放:(文件描述符是由无符号整数表示的句柄。进程使用它来标识打开的文件)
1,在文件关闭或进程终止时被关闭的。
2,如果想重用某个文件描述符,必须关闭与之关联的所有文件描述符(父进程和子进程:文件描述符可以继承,可由子进程使用)。
3,TIME_WAIT 结束时,才会释放 TCP 套接字文件描述符。
(在Unix系统中, TIME_WAIT在kernel参数tcp_time_wait_interval中设置.在Windows中,这个参数定义在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters的 TcpTimedWaitDelay键值
中. 默认值是240秒 (tcp_time_wait _interval 和 TcpTimedWaitDelay))
4,打开新文件时将会重用关闭的文件描述符
三,查看文件描述符的方法:
1,在UNIX平台,使用“文件列表” (lsof)工具
显示有关打开的文件和网络文件描述符的信息。
针对特定的process ,语句就是: lsof -p <pid of process>
这个命令可以在异常发生后检查打开文件的最大数,你也可以通过lsof –h 显示相应的语法和选项。
此程序最新版本可通过以下网址获得:http://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/lsof/
2, 在WINDOWS平台,使用handle 工具
报告有关打开文件句柄的信息。
推荐使用Process Explorer 工具
查看运行的进程和打开的文件列表.(google查一下)