vsftpd并发参数调优

vsftpd并发参数调优

文章目录

    • vsftpd并发参数调优
    • 一、前言
    • 二、压力测试
      • 1.压力测试工具
      • 2.java代码压测
    • 三、结论
      • 1.max_per_ip默认值是50
      • 2.vsftpd并发数可达理论值(TPS低)

一、前言

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.0modelVersion>
	<groupId>com.ustcgroupId>
	<artifactId>testartifactId>
	<version>0.0.1-SNAPSHOTversion>
<dependencies>
	
	<dependency>
		<groupId>commons-netgroupId>
		<artifactId>commons-netartifactId>
		<version>3.6version>
	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

vsftpd并发参数调优_第1张图片

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

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

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

你可能感兴趣的:(性能优化,常用,ftp)