接收处理报文中发现的错误
报too many open files
文件处理过程是由客户端向服务器发送报文,服务器接收报文解析、插入数据库并向客户端发送处理结果
用的是mina2 m3 希望高手给予指点

解决方案 »

  1.   

    服务器是linux/unix吧,需要修改操作系统同时打开文件数的限制。可以用nlimit命令来看
      

  2.   

    服务器是linux的,根据网上的说法和楼上说法相同,但是文件数调大无非是饮鸩止渴,报文传输是实时的!
      

  3.   

    我不知道mina2 
    但是我觉得流程是不是这样的
    客户端给服务器端发报文,然后呢,服务器把报文用文件形式保存下来。然后会有服务器另外一个程序去解析报文并且处理。
    服务器的解析程序应该不会报这样的错误,我觉得报这样的错误就很有可能是因为保存报文的那段程序里报出来的。
    这个时候,是不是需要一个缓存来保存,而不是来一段报文就保存,这样同一时间来的报文太多就会报错。以上仅为个人分析,肯定有错,请告知更多详情以便更改
      

  4.   

    楼主说的过程我理解为 报文是以流形式写入到文件当中的,每个请求发送一个报文流,并写入到文件中,然后服务器解析此报文文件?或者是服务器直接解析报文流?如果直接解析报文流是不会出现这个问题的吧,如果写到文件中的话,我还想问楼主的是你的服务器是以多线程的形式去解析报文文件吗?如果是以多线程形式解析,那可不可以做成阻塞形式的呢?linux文件限制是每个进程仅能打开1024个文件,那么楼主可不可以判断一下呢?如果当前的文件数打开了1024个,那么楼主可以对以后的线程进行阻塞?
      

  5.   

    语文真好。
    在linux/unix操作系统中,包括文件、套接字、管道等都按文件进行维护,因此对于此类错误,需要检查当前进程所占用的上述资源情况。
    推荐楼主使用  lsof 工具(网上有的下),当然我只是在unix操作系统中使用过该命令。$ lsof|grep #进程号#建议先通过上述指令,确定是由于那类资源使用不当,导致上述问题,然后再继续排查
      

  6.   

    估计文件句柄超过操作系统限制了,建议用lsof查看
      

  7.   


    同意。
    一看便知打开的是些什么“文件”。
    无非是磁盘文件和Socket连接,未关闭且未回收时就会这样。