vsftpd并发参数调优

本文深入探讨vsftpd服务器的并发性能优化,通过压力测试揭示max_per_ip的真实默认值并非无限,而是50。利用LoadRunner、JMeter及自定义Java代码进行并发测试,发现vsftpd并发数可达官方理论值,但TPS较低。文中详细记录了测试过程、参数调优及结论,为提升vsftpd性能提供实用指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vsftpd并发参数调优

一、前言

vsftpd官方文档写到standalone(常用)模式下, 单机性能可达4000以上,左右性能好的话,甚至可达到20000。

max_clients=0 (默认无限制)
解释:如果 vsftpd 是以 stand alone 方式启动的,那么这个设定项目可以设定同一时间,最多有多少 client 可以同时连上 vsftpd !限制使用 FTP 的用量!
max_per_ip=0 (默认无限制)???
解释:与上面 max_clients 类似,这里是同一个 IP 同一时间可允许多少连接。

二、压力测试

测试机器:centos7 2G 1核CPU2线程
软件版本:vsftpd 3.0.2

说明:vsftpd采用单进程多线程的方式接收客户端请求,并发连接数可以通过linux命令查看。
pstree -p pid |wc -l (其中pid未vsftpd进程号)。

1.压力测试工具

LoadRunner 2021压测ftp
jmeter压测ftp

2.java代码压测

  • pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.ustc</groupId>
	<artifactId>test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
<dependencies>
	<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
	<dependency>
		<groupId>commons-net</groupId>
		<artifactId>commons-net</artifactId>
		<version>3.6</version>
	</dependency>
</dependencies>
</project>
  • FtpTest.java
package test;

import java.io.IOException;
import java.net.SocketException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FtpTest {
	private static final String FTP_IP = "192.168.198.130";
	private static final Integer FTP_PORT = 21;
	private static final String FTP_USERNAME = "ftpserver";
	private static final String FTP_PASSWORD = "111111";
	private static final String FTP_ENCODE = "UTF-8";

	public static FTPClient getConnection() {
		FTPClient ftpClient = new FTPClient();
		ftpClient.setConnectTimeout(60000);
		ftpClient.setDataTimeout(30000);
		ftpClient.setControlEncoding(FTP_ENCODE);// 解决上传文件时文件名乱码
		int reply = 0;
		try {
			ftpClient.connect(FTP_IP, FTP_PORT);
			ftpClient.login(FTP_USERNAME, FTP_PASSWORD);
			/**
			 * 不经中转服务器(相对于remote而言),本地被动模式
			 */
			ftpClient.enterLocalActiveMode();
			/**
			 * 登陆成功,返回码是230
			 */
			reply = ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftpClient.disconnect();
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return ftpClient;
	}

	public static void main(String[] args) {
		/**
		 * 并发量
		 */
		int size = 210;
		ExecutorService service = Executors.newFixedThreadPool(size);
		for(int i=0;i<size;i++) {
			service.execute(new Runnable() {
				public void run() {
					FTPClient client = getConnection();
					try {
						FTPFile[] files = client.listFiles();
						System.out.println(files[0].getName());
					} catch (IOException e) {
						e.printStackTrace();
					} finally {
						try {
							Thread.sleep(1000*600);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						try {
							if(client.isConnected()) {
								client.disconnect();
							}
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			});
		}
		service.shutdown();
	}
	
}

三、结论

1.max_per_ip默认值是50

测试结果:max_per_ip默认值并不是0(无限制),而是50
注意:ftpClient.setConnectTimeout(30000); //连接等待时间不宜设置过短,一开始设置3秒时,偶尔连接报错,但不是421 连接过多错误,而是服务端主动关闭连接;30秒连接稳定,无问题。

压测结果:连接超时时间设置为30秒,并发支持可稳定在500左右。等待数分钟后,继续请求,总并发支持可达1200,机器性能好的话,可达官方所说的理论值.

vim vsftpd.conf

max_clients=20000
max_per_ip=1000

说明: 增加以上配置是有效的。
鉴于测试中极短时间内高并发,服务器无法支持,可搭配超时设置保证连接的稳定:

#设置建立FTP连接的超时时间,单位为秒。默认值为60。
accept_timeout=60
#PORT 方式下建立数据连接的超时时间,单位为秒。默认值为60。
connect_timeout=60
#设置建立FTP数据连接的超时时间,单位为秒。默认值为120。
data_connection_timeout=120
#可适当放短,在客户端未及时关闭连接时,以到达快速回收的目的。
#设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒。默认值为300 。
idle_session_timeout=60
#禁用域名反解析
reverse_lookup_enable=NO

客户端超时时间设置:
适度调整,防止网络异常断开后,客户端持续等待,tomcat线程阻塞。

ftpClient.setConnectTimeout(120000); 

超过限制:
421 Too many connections from this IP

错误截图

2.vsftpd并发数可达理论值(TPS低)

机器性能好的话,vsftpd并发数可达官方所说的理论值;但TPS较低仅仅20t/s,同样硬件配置下,windows IIS ftp TPS可达1500t/s
为什么?❓ ❓ ❓

参考文档:
Vsftpd中文文档
vsftpd配置文件详解
vsftp的详细配置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬山境KL攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值