`
lenozhi
  • 浏览: 52308 次
社区版块
存档分类
最新评论

关于基于mina的ftpserver的性能问题

    博客分类:
  • J2EE
阅读更多
   工作中使用到apache的ftpserver,一直以为基于mina的它是异步非阻塞IO的,结果看了源码
发现,接收是这么写的
  while (true) {
   从流中读
    写文件
 }
            }}


   真是太失望了,这样一来,ftpserver处理客户请求的数据就取决于那个ExectorFilter中的线程池大小了,ftpserver用的是OrderExectorFilter的无参构造函数,默认池的最大值是16了。要是同时接收16个大文件的话,就没有能力处理新请求了,注意NioListener还是能够处理监听的,因为它跟ioserver用的不是一个线程池(我猜的)。只是socket连上后,就处在持续等待的状态,任你新来的ftp command是啥,都不处理。直到有一个大文件传输完成,腾出一个可用线程。


   我觉得要整个基于mina的应用出来,怎么着您也得使用一下这个框架的特性,啥异步io呀,高性能呀,结果搞出这么个东东。当然apache还是NB的,我自己做不出来,只能用人家的,发发牢骚罢了,各位尽量拍,哈哈。 
分享到:
评论
6 楼 lenozhi 2010-11-29  
taolei0628 写道
想想单CPU的系统上是如何运行多进程、多线程、处理IO中断的,那是比较彻底的异步化。
NIO的架构通常都是异步监听、同步处理。在java中,这种基于线程池的普遍设计模式在处理长时间服务请求的时候都存在线程调度问题。长时间占用线程池里的共享线程是很要命的,还不如单独启一个线程。
这种框架下也没什么好办法,通常都是加大线程池容量。
比较彻底的方法之一是彻底的异步化,关键技术可能是基于任务分解和消除同步调用(尤其是同步IO)。不过这样的框架可能会比较复杂。(JDK7里好像就有任务框架和AIO)。

还有我认为同步化往往是更简单、容易的解决问题的手段,能用同步就不用异步。至于那些所谓线程资源、线程调度的相关问题,应该留给操作系统或是jvm去解决,而不是去搞什么异步框架。当然,目前来看,这还只是我个人的一个理想。



你说的方法一我赞同,当请求数远大于可用线程数时,是有必须要彻底异步。不然,线程池大于为10,正在处理10个大文件,再来一个请求也只能放到队列中了。这还得由实际需求来决定。
5 楼 taolei0628 2010-11-27  
想想单CPU的系统上是如何运行多进程、多线程、处理IO中断的,那是比较彻底的异步化。
NIO的架构通常都是异步监听、同步处理。在java中,这种基于线程池的普遍设计模式在处理长时间服务请求的时候都存在线程调度问题。长时间占用线程池里的共享线程是很要命的,还不如单独启一个线程。
这种框架下也没什么好办法,通常都是加大线程池容量。
比较彻底的方法之一是彻底的异步化,关键技术可能是基于任务分解和消除同步调用(尤其是同步IO)。不过这样的框架可能会比较复杂。(JDK7里好像就有任务框架和AIO)。

还有我认为同步化往往是更简单、容易的解决问题的手段,能用同步就不用异步。至于那些所谓线程资源、线程调度的相关问题,应该留给操作系统或是jvm去解决,而不是去搞什么异步框架。当然,目前来看,这还只是我个人的一个理想。

4 楼 lenozhi 2010-11-27  
<div class="quote_title">simen_net 写道</div>
<div class="quote_div">
<pre name="code" class="java">    public synchronized ThreadPoolExecutor getThreadPoolExecutor() {
        if(threadPoolExecutor == null) {
            int maxThreads = connectionConfig.getMaxThreads();
            if(maxThreads &lt; 1) {
                int maxLogins = connectionConfig.getMaxLogins();
                if(maxLogins &gt; 0) {
                    maxThreads = maxLogins;
                }
                else {
                    maxThreads = 16;
                }
            }
            LOG.debug("Intializing shared thread pool executor with max threads of {}", maxThreads);
            threadPoolExecutor = new OrderedThreadPoolExecutor(maxThreads);
        }
        return threadPoolExecutor;
    }</pre>
<p> 查看1.0.5源代码如上,貌似楼主的问题并不是问题</p>
</div>
<p>不好意思,你指我的问题并不是问题,能再细说说不?我之前主要说,接收文件时是同步的,这样线程池一满,就是再小的文件也得等。</p>
3 楼 simen_net 2010-11-15  
<pre name="code" class="java">    public synchronized ThreadPoolExecutor getThreadPoolExecutor() {
        if(threadPoolExecutor == null) {
            int maxThreads = connectionConfig.getMaxThreads();
            if(maxThreads &lt; 1) {
                int maxLogins = connectionConfig.getMaxLogins();
                if(maxLogins &gt; 0) {
                    maxThreads = maxLogins;
                }
                else {
                    maxThreads = 16;
                }
            }
            LOG.debug("Intializing shared thread pool executor with max threads of {}", maxThreads);
            threadPoolExecutor = new OrderedThreadPoolExecutor(maxThreads);
        }
        return threadPoolExecutor;
    }</pre>
<p> 查看1.0.5源代码如上,貌似楼主的问题并不是问题</p>
2 楼 lenozhi 2010-03-04  
david.org 写道
楼上可以根据自己的服务器性能适当的调整这个值的

也就用OrderedThreadPoolExecutor(int size)这个方法初始化线程池大小
1 楼 david.org 2010-03-03  
楼上可以根据自己的服务器性能适当的调整这个值的

相关推荐

    apache mina 学习笔记三(子项目FtpServer)

    MINA FtpServer支持多种认证机制,包括基于文件的用户数据库、LDAP集成和自定义实现。开发者可以通过实现`UserManager`接口或继承已有的实现,如`BaseUserManager`,来定义自己的用户验证逻辑。 **命令处理** MINA ...

    ftpserver mina框架,适合学习

    Apache Mina FTPServer是一个基于Apache Mina框架的轻量级FTP服务器实现,它为开发者提供了构建自定义FTP服务器的能力。这个框架非常适合初学者学习,因为它提供了清晰的结构和丰富的文档,帮助理解网络通信和FTP...

    Apache_Mina-FtpServer_use:使用 Apache_Mina_FTP 服务器

    5. **监控与调试**:利用Mina FTP Server 提供的日志功能和API,监控服务器的运行状态,进行问题排查和性能优化。 6. **扩展功能**:Apache Mina 的设计允许开发者轻松扩展,可以通过实现特定接口来添加新的命令...

    Apache_Mina_Server_ 深入教程V1.0

    Apache Mina Server是一款高性能且易于使用的网络通信应用框架,主要基于TCP/IP和UDP/IP协议栈进行设计,同时也支持其他类型的通信服务,比如JAVA对象的序列化服务、虚拟机间的管道通信服务等。该框架的核心优势在于...

    apache FTPserver 安装包

    2. **可扩展性**:Apache FTPServer基于Mina网络应用框架,具有高度可扩展性。用户可以编写自定义模块来扩展其功能,如认证、授权、日志记录等。 3. **模块化设计**:服务器由多个模块组成,每个模块负责特定的功能...

    MinaServer for Android

    MinaServer是一款专为Android平台设计的服务端应用程序,它基于Apache Mina框架构建,允许开发者在Android设备上实现高性能、低延迟的网络通信服务。Mina是一个开源项目,旨在简化网络应用开发,尤其适用于TCP/IP和...

    apache ftpserver jar包

    Apache FtpServer是一款开源的FTP服务器,它基于Java实现,提供了灵活且强大的配置方式,能够方便地集成到各种系统环境中,比如与Spring框架的整合。Apache FtpServer的核心设计目标是提供一个轻量级、高性能且易于...

    apache-ftpserver-1.0.6

    Apache FTPServer是一个开源的FTP服务器项目,源自Apache MINA项目,提供了一种高效且可扩展的方式来实现FTP(文件传输协议)服务。这个"apache-ftpserver-1.0.6"版本是该软件的一个特定发布版,包含了在该版本中所...

    Apache Ftp Server使用说明

    1. 下载:首先,你需要从Apache官方网站(http://mina.apache.org/ftpserver/download.html)下载最新版本的Apache FtpServer。 2. 解压:下载后,将压缩包解压到任意目录。 3. 配置环境变量:为了方便运行,你可以...

    apache-ftpserver-1.1.0.tar.gz

    Apache FTPServer是一款开源的FTP服务器软件,源自Jakarta MINA项目,现在是Apache软件基金会的一部分。这个名为"apache-ftpserver-1.1.0.tar.gz"的压缩包包含了Apache FTPServer的1.1.0版本,适用于那些希望在自己...

    基于mina的开源文件传输软件

    总的来说,基于Mina的Apache FtpServer是一款强大且灵活的FTP服务器实现,结合了Java NIO的高性能和Mina的易用性,使得开发者可以快速构建稳定的FTP服务环境。无论是小型项目还是大型企业,都可以从中受益。

    Apache Ftpserver

    默认的网络支持基于高性能异步IO库Apache MINA。 使用MINA,FtpServer可以扩展到大量并发用户。 特性 1、100%纯Java,免费的开源可恢复FTP服务器 2、多平台支持和多线程设计。 3、用户虚拟目录,写入权限,空闲...

    java实现FtpServer组件

    Apache组织提供的FTPServer项目,是基于MINA库的一个完整FTP服务器实现。它提供了配置管理、用户认证、虚拟主机等功能,使得开发者能够轻松地构建自己的FTP服务器。这个库包含了许多预定义的策略和配置选项,可以...

    apache-ftpserver-1.0.6.rar

    在部署和使用Apache FTPServer时,务必关注安全性和性能优化。定期更新服务器到最新版本,以保持安全性,并根据实际情况调整服务器配置,例如限制并发连接数,以防止服务器过载。 总的来说,Apache FTPServer 1.0.6...

    mina高性能Java网络框架 v2.1.3

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用...FtpServer:FTP服务器 SSHd:一个支持SSH协议的Java库 Vysper:XMPP服务器

    Apache_Mina_Server_2.0中文参考手册V1.0

    Apache Mina Server 2.0 是一个高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP协议的服务器。这个中文参考手册V1.0旨在为开发者提供详细的指导,帮助他们更好地理解和使用Apache Mina ...

    java 实现的mina server client完全能用的

    这个“java 实现的mina server client完全能用的”项目可能包含了一个完整的Mina服务器和客户端实现,使得开发者能够快速构建基于TCP或UDP的网络应用。 在Java Mina中,Server是服务端,它监听特定的端口,等待...

    Apache_Mina_Server_2.0_V1.0.rar_apache_apache中文手册_mina

    7. **性能优化**:提供关于如何调整 Mina 配置以提升系统性能的建议,包括线程池设置、缓冲区大小和心跳机制。 8. **案例分析**:可能包含一些实际项目案例,展示如何使用 Mina 构建一个完整的服务器应用。 9. **...

    mina

    1. **基于MINA框架快速开发网络应用程序(转载).html**:这可能是一个教程或指南,教读者如何利用MINA快速构建网络应用,可能包含基本概念、设置步骤和简单示例。 2. **Apache_Mina_Server_2.0中文参考手册V1.0.pdf*...

Global site tag (gtag.js) - Google Analytics