[Thread Prev][Thread Next][Index]

Re: [las_users] Problems with large number of open files at Opendap/THREDDS (including possible solution)



Bastian,

That is the correct fix and that code is in the las.v7.0.3 code which will be released shortly.

Roland

Bastian Kern wrote:
Hi all,

with a ferret script accessing LAS data via Opendap urls, I discovered a 
problem, if a loop reads many datapoints. The error is: "Too many open files" 
and the Tomcat Server stops. Below some lines of the catalina.out file:

  
Apr 9, 2009 12:32:35 PM org.apache.tomcat.util.net.PoolTcpEndpoint
acceptSocket SEVERE: Endpoint
ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080] ignored exception:
java.net.SocketException: Too many open files java.net.SocketException: Too
many open files
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
        at java.net.ServerSocket.implAccept(ServerSocket.java:453)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at
org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultS
erverSocketFactory.java:61) at
org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.jav
a:408) at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerW
orkerThread.java:71) at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.ja
va:689) at java.lang.Thread.run(Thread.java:619)
Apr 9, 2009 12:32:35 PM org.apache.tomcat.util.net.PoolTcpEndpoint
acceptSocket WARNING: Reinitializing ServerSocket
Apr 9, 2009 12:32:37 PM org.apache.tomcat.util.net.PoolTcpEndpoint
acceptSocket SEVERE: Endpoint
ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080] ignored exception:
java.net.SocketException: Too many open files java.net.SocketException: Too
many open files
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
        at java.net.ServerSocket.implAccept(ServerSocket.java:453)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at
org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultS
erverSocketFactory.java:61) at
org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.jav
a:408) at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerW
orkerThread.java:71) at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.ja
va:689) at java.lang.Thread.run(Thread.java:619)
Apr 9, 2009 12:32:37 PM org.apache.tomcat.util.net.PoolTcpEndpoint
acceptSocket WARNING: Reinitializing ServerSocket
    

Possible solution:

Edit the FerretIOServiceProvider.java file at: 
$LASDIR/JavaSource/gov/noaa/pmel/tmap/iosp/, so that opend files will be 
closed.
I added a variable

  
private RandomAccessFile raf;
    

to the public FerretIOServiceProvider class and changed close() and 
open(RandomAccessFile raf, NetcdfFile ncfile, CancelTask cancelTask):

  
    public void close() throws IOException {
        // TODO Auto-generated method stub
        raf.close();                                // NEW !!
    }
    

  
    public void open(RandomAccessFile raf, NetcdfFile ncfile,
            CancelTask cancelTask) throws IOException {
        log.debug("Opening " + raf.getLocation());
        this.raf = raf;                             // NEW !!
        raf.seek(0);
        StringReader sr;
        try {
            byte[] b = new byte[(int)raf.length()];
            raf.read(b);
            sr = new StringReader(new String(b));
        } catch (IOException e) {
            log.debug("IO Exception reading the random access file.");
            throw e;
        }
[...]
    

Best regards,
Bastian

  


[Thread Prev][Thread Next][Index]


Contact Us
Dept of Commerce / NOAA / OAR / PMEL / TMAP

Privacy Policy | Disclaimer | Accessibility Statement