如何查看节点的可用句柄数目和已用句柄数

本文介绍了一个Erlang程序,用于查看节点的可用文件句柄数目和已用句柄数,帮助诊断和预警句柄不足问题。
很多同学在使用erlang的过程中, 碰到了很奇怪的问题, 后来查明都是文件句柄不够用了, 因为系统默认的是每个进程1024. 所以我们有必要在程序运行的时候, 了解这些信息, 以便诊断和预警.
下面的这个程序就演示了这个如何查看节点的可用句柄数目和已用句柄数的功能.

首先确保你已经安装了lsof, 我的系统是ubuntu可以这样安装.
root@ubuntu:~# apt-get -y install lsof
root@ubuntu:~# cat fd.erl
[code]
-module(fd).
-export([start/0]).

get_total_fd_ulimit() ->
{MaxFds, _} = string:to_integer(os:cmd("ulimit -n")),
MaxFds.

get_total_fd() -> get_total_fd(os:type()).

get_total_fd({unix, Os})
when Os =:= linux orelse
Os =:= darwin orelse
Os =:= freebsd orelse Os =:= sunos ->
get_total_fd_ulimit();
get_total_fd(_) -> unknown.

get_used_fd_lsof() ->
Lsof = os:cmd("lsof -d \"0-9999999\" -lna -p " ++
os:getpid()),
string:words(Lsof, $\n).

get_used_fd() -> get_used_fd(os:type()).

get_used_fd({unix, Os})
when Os =:= linux orelse
Os =:= darwin orelse Os =:= freebsd ->
get_used_fd_lsof();
get_used_fd(_) -> unknown.

start()->
io:format("total fd: ~p~n"
"used fd: ~p~n", [get_total_fd(), get_used_fd()]),
halt(0).
[/code]

root@ubuntu:~# erlc fd.erl
root@ubuntu:~# ulimit -n 1024
root@ubuntu:~# erl -noshell -s fd
total fd: 1024
used fd: 10
root@ubuntu:~# ulimit -n 10240
root@ubuntu:~# erl -noshell -s fd
total fd: 10240
used fd: 10
root@ubuntu:~#


收工!
### 如何优化FTP服务器以释放更多连接数 为了提高FTP服务器性能并释放更多的连接数,可以采取以下措施: #### 1. 修改FTP服务器的最大连接数限制 通过调整FTP服务器的配置文件来增加最大允许的并发连接数量。对于常见的FTP服务器(如vsftpd),可以通过编辑其配置文件实现此功能。例如,在`/etc/vsftpd.conf`中添加或修改以下参数[^3]: ```bash max_clients=500 # 设置全局最大客户端连接数 max_per_ip=20 # 每个IP地址的最大连接数 ``` 保存更改后重启FTP服务以使新设置生效。 #### 2. 定期清理闲置连接 长时间保持未活动状态的会话可能会占用大量资源。为此可以在配置文件中启用超时机制,强制关闭超过一定时间无响应的连接[^4]。继续以上述vsftpd为例,可加入如下选项: ```bash idle_session_timeout=300 # 单位秒,表示空闲回话将在五分钟后被终止 data_connection_timeout=120 # 数据传输完成后等待的时间长度(单位也是秒) accept_timeout=60 # 控制建立控制通道所需最长时间 connect_timeout=60 # 设定数据端口打开后的最长等待期限 ``` #### 3. 使用更高效的协议替代传统FTP 考虑到标准FTP存在诸多安全性效率方面的问题,推荐考虑采用更加现代化的技术方案比如SFTP或者SCP来进行文件交换工作[^2]。这些基于SSH加密通信的方式不仅提供了更高的安全性保障而且通常也具有更好的性能表现。 #### 4. 调整操作系统层面的网络参数 除了直接针对FTP应用本身做出改动之外,还可以通过对底层TCP/IP栈属性进行微调从而间接影响整体吞吐能力稳定性。一些可能有用的Linux内核参数包括但不限于下面几个例子[^4]: - `net.ipv4.tcp_tw_reuse`: 启用TIME_WAIT套接字重用。 - `net.core.somaxconn`: 增加监听队列长度上限,默认值通常是128。 - `fs.file-max`: 提高整个系统的可用句柄数目限额。 执行命令行操作前务必确认当前环境确实需要这样的变更,并且充分测试任何潜在副作用后再推广至生产环境中去实施。 #### 5. 实施负载均衡策略 当单一节点难以承受过高访问压力的时候,则应当思考引入额外实例形成集群结构并通过专门软件分发请求给不同成员处理的方法[^5]。这样不仅可以有效缓解单点瓶颈现象还能增强容错能力。 --- ### 示例代码片段展示如何动态监控与管理VSFTPD进程下的活跃链接状况 以下是利用shell脚本实时跟踪特定时间段内的在线人数变化趋势的一个简单示范程序: ```bash #!/bin/bash while true; do echo "$(date): $(lsof -i :21 | wc -l)" >> ftp_connections.log sleep 60 done ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值