Linux FS

芒果牛奶 2021-02-23 16:08:10
linux 操作系统 SegmentFault fs


文件描述符(file descrition)
文件句柄数(file handle)

每个进程都有一个打开的文件表(fdtable)。表中的每一项是struct file类型,包含了打开文件的一些属性比如偏移量,读写访问模式等,这是真正意义上的文件句柄。

文件描述符是一个整数。代表fdtable中的索引位置(下标),指向具体的struct file(文件句柄)。

文件描述符(fd)

在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

最大文件描述符限额 cat /proc/sys/fs/nr_open

设置最大文件描述符
vi /etc/security/limits.conf

  • soft nofile 999999
  • hard nofile 999999

ulimit -a 查看文件描述符

查看某个进程的文件描述符

终端进程1800640,打开了15个文件,占用了5个文件描述符
一个文件即使被打开,也可能没有文件描述符,比如当前工作目录,内存映射文件和可执行文本文件

查看当前文件打开数
lsof -P -n |wc -l

统计排序
lsof -P -n |awk '{print $2}'| sort -n | uniq -c | sort -nr |head -10

统计某个进程打开的文件数
lsof -p pid |wc -l

文件句柄数

设置最大句柄数
vi /etc/sysctl.conf

fs.file-max = 10240

这个参数的默认值和内存大小有关系,可以使用公式:file-max ≈ 内存大小(KB)/ 10

cat /proc/sys/fs/file-max 查看最大打开文件句柄数

cat /proc/sys/fs/file-nr 查看 当前已使用句柄 已分配未使用句柄 最大句柄数

哪些地方会分配文件句柄

open系统调用打开文件(path_openat内核函数)

打开一个目录(dentry_open函数)

共享内存attach (do_shmat函数)

socket套接字(sock_alloc_file函数)

管道(create_pipe_files函数)

epoll/inotify/signalfd等功能用到的匿名inode文件系统(anon_inode_getfile函数)

参考来源:
https://juejin.im/entry/5b56f...
https://blog.csdn.net/u013256...
https://blog.csdn.net/qq_2935...

版权声明
本文为[芒果牛奶]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000039262882

  1. Deep understanding of Web protocol (3): http 2
  2. Tencent IEG open source AI SDK: automatic testing of chicken eating and MoBa games
  3. Mysql Command
  4. Docker dockerfile create image
  5. Redis Cluster
  6. 死磕Spring之IoC篇 - 文章导读
  7. Deep understanding of Web protocol (3): http 2
  8. JavaScript BOM operation
  9. JavaScript BOM operation
  10. 死磕Spring之IoC篇 - 文章导读
  11. k8s node 操作与维护
  12. k8s 证书更新
  13. 【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?
  14. HashMap连环问你能答出几道?
  15. k8s-cronjob
  16. k8s-cert
  17. 头条面试官:说说Kafka的消费者提交方式,怎么实现的
  18. 什么是HTTPS以及如何实施HTTPS?
  19. Spring: an introduction to IOC
  20. Spring: an introduction to IOC
  21. Operation and maintenance of k8s node
  22. K8s certificate update
  23. vue使用sdk进行七牛上传
  24. k8s-dns
  25. JavaScript 邮箱验证 - 正则验证
  26. k8s-dashboard
  27. HashMap连环问你能答出几道?
  28. Where does memory overflow occur in the JVM? What are the reasons for this?
  29. How many questions can you answer?
  30. k8s-cronjob
  31. spring注解--Transactional
  32. k8s-cert
  33. Will the Spring Festival holiday be extended to February 27 in 2021? Here comes the response
  34. Headline Interviewer: talk about Kafka's consumer submission method, how to achieve it
  35. 【k8s集群】搭建步骤
  36. k8s-kubeadm
  37. k8s-etcd
  38. What is HTTPS and how to implement it?
  39. Java中使用HashMap改进查找性能
  40. maven发布jar包运行时找不到类问题
  41. J2EE
  42. Vue uses SDK to upload seven cows
  43. k8s-dns
  44. JavaScript mailbox verification - regular verification
  45. k8s-dashboard
  46. How many questions can you answer?
  47. Spring annotation -- transactional
  48. [k8s cluster] construction steps
  49. k8s-kubeadm
  50. k8s-etcd
  51. Using HashMap to improve search performance in Java
  52. There is no class problem when Maven publishes jar package
  53. JavaScriptBOM操作
  54. J2EE
  55. k8s-prometheus-memory
  56. k8s-prometheus disk
  57. k8s-prometheus
  58. JavaScript BOM operation
  59. k8s-prometheus-memory
  60. k8s-prometheus disk