linux句柄泄露问题查看
背景:
我们在开发linux在线server的时候常常会遇会句柄泄露的问题。由于在linux系统设计里面遵循一切都是文件的原则。即磁盘文件、文件夹、网络套接字、磁盘、管道等,全部这些都是文件。在我们进行打开的时候会返回一个fd,即是文件句柄。
假设频繁的打开文件,或者打开网络套接字而忘记释放就会有句柄泄露的现象。在linux系统中对进程能够调用的文件句柄数进行了限制。在默认情况下每一个进程能够调用的最大句柄数是1024个。假设超过了这个限制,进程将无法获取新的句柄,而从导致不能打开新的文件或者网络套接字,对于线上server即会出现服务被拒绝的情况。
查看与改动句柄:
在linux系统中能够通过ulimit–n查看每一个进程限制的最大句柄数,通过ulimit –HSn 10240改动进程的最大句柄数。
当句柄数目达到限制后,就回出现”too many files open”。
查看进程占用的句柄数有几种办法:
1) 通过cat/proc/pid/fd能够查看线程pid号打开的线程;
2) 通过lsof命令, /usr/sbin/lsof-p 21404 命令结果例如以下:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vas 21404 root cwd DIR 8,3 4096 30195729 /home/users/root/vas
vas 21404 root rtd DIR 8,2 4096 2 /
vas 21404 root txt REG 8,3 112201650 30195914 /home/users/root/vas
vas 21404 root mem REG 0,0 0 [heap] (stat: No such file or directory)
vas 21404 root mem REG 8,2 105080 339377 /lib64/ld-2.3.4.so
vas 21404 root mem REG 8,2 1493186 339367 /lib64/tls/libc-2.3.4.so
vas 21404 root mem REG 8,2 17943 339392 /lib64/libdl-2.3.4.so
vas 21404 root mem REG 8,2 613297 339369 /lib64/tls/libm-2.3.4.so
vas 21404 root mem REG 8,2 79336 490463 /usr/lib64/libz.so.1.2.1.2
COMMAND:进程的名称
PID:进程标识符
USER:进程全部者
FD:文件描写叙述符。应用程序通过文件描写叙述符识别该文件。
如 cwd、txt等
TYPE:文件类型,如 DIR、REG、IPV4、FIEO等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
另外通lsof命令也能够查看占用port的进程:
/usr/sbin/lsof-i :9001
linux句柄泄露问题查看的更多相关文章
- .NET对象与Windows句柄(三):句柄泄露实例分析
在上篇文章.NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子中,我们有一个句柄泄露的例子.例子中多次创建和Dispose了DataReceiver和DataAnalyzer对象, ...
- Linux使用jstat命令查看jvm的GC情况(转)
B. jstack jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: 1 jstack [option] pid 2 jstack [option] executable co ...
- windbg调试实例(4)--句柄泄露
同事介绍了一篇调试句柄泄露的blog文章,今天有空看了一下,这家伙用视频的方式录下整个调试的过程,学习一目了然,真是有心.鉴于学习的过程总结一下能加深记忆,所以我这里做个记录,感兴趣的朋友可以看这里: ...
- Linux使用jstat命令查看jvm的GC情况
Linux使用jstat命令查看jvm的GC情况 http://www.open-open.com/lib/view/open1390916852007.html http://www.aiuxian ...
- .NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子
上一篇文章介绍了句柄的基本概念,也描述了C#中创建文件句柄的过程.我们已经知道句柄代表Windows内部对象,文件对象就是其中一种,但显然系统中还有更多其它类型的对象.本文将简单介绍Windows对象 ...
- Linux使用netstat命令查看并发连接数[转]
转自:http://www.cnblogs.com/wayne173/p/5652043.html Linux使用netstat命令查看并发连接数 我们的网站部署在linux的服务器上,特别是we ...
- Linux和Windows下查看环境变量方法对比
摘自:Linux和Windows下查看环境变量方法对比 一.查看所有环境变量的名称和值 Linux下:export Windows下:set 二.根据名称查该环境变量的值 Linux下:echo $环 ...
- Linux命令 — 设置或查看网络配置命令ifconfig
ifconfig命令用于设置或查看网络配置,包括IP地址.网络掩码.广播地址等.它是linux系统中,使用频率最高的关于网络方面的命令. 1. 命令介绍 命令格式: ifconfig [interfa ...
- 在Linux下用netstat查看网络状态、端口状态
在Linux下用netstat查看网络状态.端口状态 在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实 ...
随机推荐
- vim要粘贴的话,先set paste,然后粘贴,然后再set nopaste
要粘贴的话,先set paste,然后粘贴,然后再set nopaste
- 【原】jq简易教程
https://www.jianshu.com/p/3522fe70de19 https://www.jianshu.com/p/6de3cfdbdb0e 1. jq简介 jq可以对json数据进行分 ...
- B2. Concurrent 线程池(Executor)
[概述] 与数据库连接管理类似,线程的创建和销毁会耗费较大的开销,使用 “池化技术” 来更好地利用当前线程资源,减少因线程创建和销毁带来的开销,这就是线程池产生的原因. [无限创建线程的不足] 在生产 ...
- ubuntu 18.04 安装.net core
要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系那就只好在琢磨了,然后就发现了在github有安装的方法因为是18.04 所以 wget -qO- https://packages.micro ...
- Linux C下变量和常量的存储的本质
源代码 #cat main.c #include <stdio.h> int i = 100; int main(void) { func(); return 0; } #cat func ...
- CSS工具、CSS重置(CSS Reset)
样式重置的目的是减少浏览器的不一致性,例如line-height,margin,标题的font-size大小等等.样式重置经常在CSS框架中出现. 这里的重置样式故意写的很一般,例如没有为body元素 ...
- 利用Merge into 改写Update SQL 一例
前言 客户说,生产系统最近CPU使用率经常达到100%,请DBA帮忙调查一下. 根据客户提供的情况描述及对应时间段,我导出AWR,发现如下问题: 11v41vaj06pjd :每次执行消耗2,378, ...
- winform ComboBox/TextBox自动提示
ComboBox和TextBox控件都带有自动前缀匹配,只要设置其中的AutoCompleteMode,AutoCompleteSource,AutoCompleteCustomSource三个属性的 ...
- Spider-Python爬虫之聚焦爬虫与通用爬虫的区别
为什么要学习爬虫? 学习爬虫,可以私人订制一个搜索引擎. 大数据时代,要进行数据分析,首先要有数据源. 对于很多SEO从业者来说,从而可以更好地进行搜索引擎优化. 什么是网络爬虫? 模拟客户端发送网络 ...
- UVa 122 树的层次遍历
题意: 给定一颗树, 按层次遍历输出. 分析: 用数组模拟二叉树, bfs即可实现层次遍历 #include <bits/stdc++.h> using namespace std; st ...