这里我设置现成是20,然后出现了io异常,说socket无法读取。。而且FTPServer日志文件说,连接被关闭的错误。。
这个折磨的头大啊,死活找不出来原因。。。纠结纠结。。。。
于是上FtpServer的源码。。下载不多说。。和下载FtpServer一个页面里面。
用maven把项目导入Eclipse中,阅读。。。。
于是令人吐血的地方发现了。。。
在package org.apache.ftpserver.impl中的DefaultFtpServerContext类中我发现了这么一些方法。。。。
public synchronized ThreadPoolExecutor getThreadPoolExecutor() { if(threadPoolExecutor == null) { int maxThreads = connectionConfig.getMaxThreads(); if(maxThreads < 1) { int maxLogins = connectionConfig.getMaxLogins(); if(maxLogins > 0) { maxThreads = maxLogins; } else { maxThreads = 16; } } LOG.debug("Intializing shared thread pool executor with max threads of {}", maxThreads); threadPoolExecutor = new OrderedThreadPoolExecutor(maxThreads); } return threadPoolExecutor; }
然后connectionConfig里面我又看了下
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.ftpserver; import org.apache.ftpserver.impl.DefaultConnectionConfig; /** * Factory for creating connection configurations * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ public class ConnectionConfigFactory { private int maxLogins = 10; private boolean anonymousLoginEnabled = true; private int maxAnonymousLogins = 10; private int maxLoginFailures = 3; private int loginFailureDelay = 500; private int maxThreads = 0; /** * Create a connection configuration instances based on the configuration on this factory * @return The {@link ConnectionConfig} instance */ public ConnectionConfig createConnectionConfig() { return new DefaultConnectionConfig(anonymousLoginEnabled, loginFailureDelay, maxLogins, maxAnonymousLogins, maxLoginFailures, maxThreads); } /** * The delay in number of milliseconds between login failures. Important to * make brute force attacks harder. * * @return The delay time in milliseconds */ public int getLoginFailureDelay() { return loginFailureDelay; } /** * The maximum number of anonymous logins the server would allow at any given time * @return The maximum number of anonymous logins */ public int getMaxAnonymousLogins() { return maxAnonymousLogins; } /** * The maximum number of time an user can fail to login before getting disconnected * @return The maximum number of failure login attempts */ public int getMaxLoginFailures() { return maxLoginFailures; } /** * The maximum number of concurrently logged in users * @return The maximum number of users */ public int getMaxLogins() { return maxLogins; } /** * Is anonymous logins allowed at the server? * @return true if anonymous logins are enabled */ public boolean isAnonymousLoginEnabled() { return anonymousLoginEnabled; } /** * Set she maximum number of concurrently logged in users * @param maxLogins The maximum number of users */ public void setMaxLogins(final int maxLogins) { this.maxLogins = maxLogins; } /** * Returns the maximum number of threads the server is allowed to create for * processing client requests. * * @return the maximum number of threads the server is allowed to create for * processing client requests. */ public int getMaxThreads() { return maxThreads; } /** * Sets the maximum number of threads the server is allowed to create for * processing client requests. * * @param maxThreads * the maximum number of threads the server is allowed to create * for processing client requests. */ public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; } /** * Set if anonymous logins are allowed at the server * @param anonymousLoginEnabled true if anonymous logins should be enabled */ public void setAnonymousLoginEnabled(final boolean anonymousLoginEnabled) { this.anonymousLoginEnabled = anonymousLoginEnabled; } /** * Sets the maximum number of anonymous logins the server would allow at any given time * @param maxAnonymousLogins The maximum number of anonymous logins */ public void setMaxAnonymousLogins(final int maxAnonymousLogins) { this.maxAnonymousLogins = maxAnonymousLogins; } /** * Set the maximum number of time an user can fail to login before getting disconnected * @param maxLoginFailures The maximum number of failure login attempts */ public void setMaxLoginFailures(final int maxLoginFailures) { this.maxLoginFailures = maxLoginFailures; } /** * Set the delay in number of milliseconds between login failures. Important to * make brute force attacks harder. * * @param loginFailureDelay The delay time in milliseconds */ public void setLoginFailureDelay(final int loginFailureDelay) { this.loginFailureDelay = loginFailureDelay; } }
我直接吐血了。。private int maxLogins = 10;。。。根据DefaultFtpServerContext,我发现了,FtpServer里面的
线程池默认值是10。。。也就是说FtpServer里面默认的线程池是10个线程。。。无语。。
难道apache就这么傻?答案是不能,所以我就找所有的配置文件,把用户的单个ip登录设置成1w,同时登录1w。。。
启动发现还是有问题。。。那怎么设置这个线程池。。。。
读源码把。。。。。
终于发现。。。在ftpd-typical.xml中
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd
"
id="myServer" max-logins="20000">
<listeners>
<nio-listener name="default" port="21">
<ssl>
<keystore file="./res/ftpserver.jks" password="password" />
</ssl>
</nio-listener>
</listeners>
<file-user-manager file="./res/conf/users.properties" />
</server>
苍天,max-logins。。。。这里可以设置。。。。添加上之后,便可以变更线程池大小了。,。
于是,问题解决了。。。
对了,ftpserver目录/common/classes/下有log4j.properties。把info修改成debug启动。、。然后看log日志
[ INFO] 2011-10-20 18:48:14,234 [] [] Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7: display name [org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7]; startup date [Thu Oct 20 18:48:14 CST 2011]; root of context hierarchy [ INFO] 2011-10-20 18:48:14,288 [] [] Loading XML bean definitions from file [F:\developtool\ftpserver-1.0.6\apache-ftpserver-1.0.6\res\conf\ftpd-typical.xml] [DEBUG] 2011-10-20 18:48:14,300 [] [] Using JAXP provider [com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl] [DEBUG] 2011-10-20 18:48:14,346 [] [] Loading schema mappings from [META-INF/spring.schemas] [DEBUG] 2011-10-20 18:48:14,350 [] [] Loaded schema mappings: {http://www.springframework.org/schema/lang/spring-lang.xsd=org/springframework/scripting/config/spring-lang-2.5.xsd, http://www.springframework.org/schema/lang/spring-lang-2.5.xsd=org/springframework/scripting/config/spring-lang-2.5.xsd, http://www.springframework.org/schema/context/spring-context-2.5.xsd=org/springframework/context/config/spring-context-2.5.xsd, http://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-2.5.xsd, http://www.springframework.org/schema/util/spring-util-2.0.xsd=org/springframework/beans/factory/xml/spring-util-2.0.xsd, http://www.springframework.org/schema/util/spring-util-2.5.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd, http://www.springframework.org/schema/tool/spring-tool-2.0.xsd=org/springframework/beans/factory/xml/spring-tool-2.0.xsd, http://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd, http://www.springframework.org/schema/tool/spring-tool-2.5.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd, http://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd, http://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd, http://www.springframework.org/schema/jee/spring-jee.xsd=org/springframework/ejb/config/spring-jee-2.5.xsd, http://mina.apache.org/ftpserver/ftpserver-1.0.xsd=org/apache/ftpserver/config/spring/ftpserver-1.0.xsd, http://www.springframework.org/schema/tool/spring-tool.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd, http://www.springframework.org/schema/jee/spring-jee-2.0.xsd=org/springframework/ejb/config/spring-jee-2.0.xsd, http://www.springframework.org/schema/jee/spring-jee-2.5.xsd=org/springframework/ejb/config/spring-jee-2.5.xsd, http://www.springframework.org/schema/lang/spring-lang-2.0.xsd=org/springframework/scripting/config/spring-lang-2.0.xsd, http://www.springframework.org/schema/util/spring-util.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd} [DEBUG] 2011-10-20 18:48:14,351 [] [] Found XML schema [http://mina.apache.org/ftpserver/ftpserver-1.0.xsd] in classpath: org/apache/ftpserver/config/spring/ftpserver-1.0.xsd [DEBUG] 2011-10-20 18:48:14,367 [] [] Found XML schema [http://www.springframework.org/schema/beans/spring-beans-2.5.xsd] in classpath: org/springframework/beans/factory/xml/spring-beans-2.5.xsd [DEBUG] 2011-10-20 18:48:14,397 [] [] Loading bean definitions [DEBUG] 2011-10-20 18:48:14,408 [] [] Loaded mappings [{http://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler, http://www.springframework.org/schema/lang=org.springframework.scripting.config.LangNamespaceHandler, http://www.springframework.org/schema/jee=org.springframework.ejb.config.JeeNamespaceHandler, http://mina.apache.org/ftpserver/spring/v1=org.apache.ftpserver.config.spring.FtpServerNamespaceHandler, http://www.springframework.org/schema/util=org.springframework.beans.factory.xml.UtilNamespaceHandler, http://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler}] [DEBUG] 2011-10-20 18:48:14,427 [] [] Loading key store from "F:\developtool\ftpserver-1.0.6\apache-ftpserver-1.0.6\.\res\ftpserver.jks", using the key store type "jks" [DEBUG] 2011-10-20 18:48:14,427 [] [] Trying to load store from file [DEBUG] 2011-10-20 18:48:14,464 [] [] SSL configuration found for the listener, falling back for that for the data connection [DEBUG] 2011-10-20 18:48:14,486 [] [] Loaded 4 bean definitions from location pattern [res/conf/ftpd-typical.xml] [ INFO] 2011-10-20 18:48:14,486 [] [] Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7]: org.springframework.beans.factory.support.DefaultListableBeanFactory@641e9a [DEBUG] 2011-10-20 18:48:14,486 [] [] 4 beans defined in org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7: display name [org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7]; startup date [Thu Oct 20 18:48:14 CST 2011]; root of context hierarchy [DEBUG] 2011-10-20 18:48:14,497 [] [] Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@62937c] [DEBUG] 2011-10-20 18:48:14,498 [] [] Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@a31e1b] [ INFO] 2011-10-20 18:48:14,499 [] [] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@641e9a: defining beans [org.apache.ftpserver.listener.ListenerFactory#0,org.apache.ftpserver.usermanager.PropertiesUserManagerFactory#0,org.apache.ftpserver.FtpServerFactory#0,myServer]; root of factory hierarchy [DEBUG] 2011-10-20 18:48:14,500 [] [] Creating shared instance of singleton bean 'org.apache.ftpserver.listener.ListenerFactory#0' [DEBUG] 2011-10-20 18:48:14,500 [] [] Creating instance of bean 'org.apache.ftpserver.listener.ListenerFactory#0' [DEBUG] 2011-10-20 18:48:14,513 [] [] Eagerly caching bean 'org.apache.ftpserver.listener.ListenerFactory#0' to allow for resolving potential circular references [DEBUG] 2011-10-20 18:48:14,521 [] [] Finished creating instance of bean 'org.apache.ftpserver.listener.ListenerFactory#0' [DEBUG] 2011-10-20 18:48:14,521 [] [] Creating shared instance of singleton bean 'org.apache.ftpserver.usermanager.PropertiesUserManagerFactory#0' [DEBUG] 2011-10-20 18:48:14,522 [] [] Creating instance of bean 'org.apache.ftpserver.usermanager.PropertiesUserManagerFactory#0' [DEBUG] 2011-10-20 18:48:14,522 [] [] Eagerly caching bean 'org.apache.ftpserver.usermanager.PropertiesUserManagerFactory#0' to allow for resolving potential circular references [DEBUG] 2011-10-20 18:48:14,524 [] [] Finished creating instance of bean 'org.apache.ftpserver.usermanager.PropertiesUserManagerFactory#0' [DEBUG] 2011-10-20 18:48:14,524 [] [] Creating shared instance of singleton bean 'org.apache.ftpserver.FtpServerFactory#0' [DEBUG] 2011-10-20 18:48:14,524 [] [] Creating instance of bean 'org.apache.ftpserver.FtpServerFactory#0' [DEBUG] 2011-10-20 18:48:14,576 [] [] Eagerly caching bean 'org.apache.ftpserver.FtpServerFactory#0' to allow for resolving potential circular references [DEBUG] 2011-10-20 18:48:14,577 [] [] Creating instance of bean '(inner bean)' [DEBUG] 2011-10-20 18:48:14,578 [] [] Returning cached instance of singleton bean 'org.apache.ftpserver.listener.ListenerFactory#0' [DEBUG] 2011-10-20 18:48:14,580 [] [] Finished creating instance of bean '(inner bean)' [DEBUG] 2011-10-20 18:48:14,584 [] [] Creating instance of bean '(inner bean)#1' [DEBUG] 2011-10-20 18:48:14,584 [] [] Returning cached instance of singleton bean 'org.apache.ftpserver.usermanager.PropertiesUserManagerFactory#0' [DEBUG] 2011-10-20 18:48:14,584 [] [] File configured, will try loading [DEBUG] 2011-10-20 18:48:14,585 [] [] File found on file system [DEBUG] 2011-10-20 18:48:14,585 [] [] Finished creating instance of bean '(inner bean)#1' [DEBUG] 2011-10-20 18:48:14,585 [] [] Finished creating instance of bean 'org.apache.ftpserver.FtpServerFactory#0' [DEBUG] 2011-10-20 18:48:14,586 [] [] Creating shared instance of singleton bean 'myServer' [DEBUG] 2011-10-20 18:48:14,586 [] [] Creating instance of bean 'myServer' [DEBUG] 2011-10-20 18:48:14,586 [] [] Returning cached instance of singleton bean 'org.apache.ftpserver.FtpServerFactory#0' [DEBUG] 2011-10-20 18:48:14,587 [] [] Eagerly caching bean 'myServer' to allow for resolving potential circular references [DEBUG] 2011-10-20 18:48:14,587 [] [] Finished creating instance of bean 'myServer' [DEBUG] 2011-10-20 18:48:14,587 [] [] Publishing event in context [org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7]: org.springframework.context.event.ContextRefreshedEvent[source=org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7: display name [org.springframework.context.support.FileSystemXmlApplicationContext@1ff5ea7]; startup date [Thu Oct 20 18:48:14 CST 2011]; root of context hierarchy] [DEBUG] 2011-10-20 18:48:14,587 [] [] Returning cached instance of singleton bean 'myServer' [DEBUG] 2011-10-20 18:48:14,664 [] [] Intializing shared thread pool executor with max threads of 20000 [ INFO] 2011-10-20 18:48:14,698 [] [] FTP server started
看到倒数第二条了吗? 线程池大小。。。。
于是到此结束。。。。