文件句柄

Posted wyglog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件句柄相关的知识,希望对你有一定的参考价值。

1,文件句柄

在linux/unix操作系统中一切皆文件,我们的设备是文件,文件是文件,文件夹也是文件。当我们用户每发起一次请求,就会产生一个文件句柄。文件句柄可以简单的理解为文件句柄就是一个索引。文件句柄就会随着请求量的增多,进程调用频繁增加,那么产生的文件句柄也就会越多。

系统默认对文件句柄是有限制的,不可能会让一个进程无限制的调用句柄。因为系统资源是有限的,所以我们需要限制每一个服务能够使用多大的文件句柄。操作系统默认使用的文件句柄是1024个句柄。

2、设置方式
  • 系统全局性修改

  • 用户局部性修改

  • 进程局部性修改

3、系统全局性修该和用户局部性修改

[root@nginx-server ~]# vim /etc/security/limits.conf 

#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4

#root只是针对root这个用户来限制,soft只是发提醒,操作系统不会强制限制,一般的站点设置为一万左右就ok了
root soft nofile 65535
root hard nofile 65535
# *代表通配符 所有的用户
* soft nofile 25535
* hard nofile 25535

可以看到root*,root代表是root用户,*代表的是所有用户,后面的数字就是文件句柄大小。大家可以根据个人业务来进行设置。

[root@nginx-server ~]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes  1;  
?
error_log /var/log/nginx/error.log warn;
pid       /var/run/nginx.pid;
?
worker_rlimit_nofile 65535; #进程限制
?
events {
  worker_connections  1024;
}
?
http {
  include       /etc/nginx/mime.types;
  default_type application/octet-stream;
?
  log_format main  ‘$http_user_agent‘ ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                     ‘$status $body_bytes_sent "$http_referer" ‘
                     ‘"$http_user_agent" "$http_x_forwarded_for" ‘
                     ‘"$args" "$request_uri"‘;
?
  access_log /var/log/nginx/access.log main;
?
  sendfile       on;
   #tcp_nopush     on;
?
  keepalive_timeout  65;
?
   #gzip on;
?
  include /etc/nginx/conf.d/*.conf;
}

worker_rlimit_nofile 是在进程上面进行限制。

以上是关于文件句柄的主要内容,如果未能解决你的问题,请参考以下文章

(Kotlin)Fragment Back 堆栈句柄

Android Fragment句柄后退按钮按下[重复]

获取指定句柄的类型号.

模块句柄(实例句柄)和句柄的区别

如何将 Perl 的 system() 的输出重定向到文件句柄?

VSCode自定义代码片段——.vue文件的模板