https://unix.stackexchange.com/questions/108603/do-changes-in-etc-security-limits-conf-require-a-reboot
Sendt fra min iPhone > 30. nov. 2018 kl. 11:17 skrev Krishan Babbar <[email protected]>: > > Dear All, > > I am working on an IoT project. I have created a Java application using MINA > library. All the devices are connecting to this Java application using TCP > protocol. I am getting around 3000 packets per hour from about 50 devices as > of now and it will increase soon. > > I am facing one issue on production environment. After running say 1-2 days, > my application stops receiving packets from all the devices but application > process keep running. To make it working again, I need to restart my Java > application. I noticed following warnings in logs. > Warnings > [NioSocketAcceptor-3] WARN org.apache.mina.util.DefaultExceptionMonitor > 30/11/2018 05:25:40 - Unexpected exception. > java.io.IOException: Too many open files > at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) > at > sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) > at > sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) > at > org.apache.mina.transport.socket.nio.NioSocketAcceptor.accept(NioSocketAcceptor.java:194) > at > org.apache.mina.transport.socket.nio.NioSocketAcceptor.accept(NioSocketAcceptor.java:51) > at > org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.processHandles(AbstractPollingIoAcceptor.java:544) > at > org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.run(AbstractPollingIoAcceptor.java:484) > at > org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > > Due to above warnings in logs, yesterday, after doing some Google, I changed > file limits in "/etc/security/limits.conf" file to 100000 as shown below, but > I did not restart my Java application. > * hard nofile 100000 > * soft nofile 100000 > > Today. I got the same warnings again and I was not getting any packet from > any of the devices. So I restarted my Java application and devices started > sending packets again. > Now, my questions are > > - After application stopped receiving packets, I restarted my Java > application today. Will it consider new file limits i.e. 100000 and not give > Exceptions again? Or do I need to reboot machine as well? > > - What do you think, why application stops receiving packets from > devices? Is it only due to exception "Too many open files" or it can be due > to any other reasons as well? Please guide. > > - Is my MINA configuration fine shown in below Java code? Please > suggest if I need to fine tune it more. > > > Below is given our code for MINA configuration. > import java.io.IOException; > import java.net.InetSocketAddress; > import org.apache.log4j.Logger; > import org.apache.mina.core.service.AbstractIoAcceptor; > import org.apache.mina.core.session.IdleStatus; > import org.apache.mina.filter.logging.LoggingFilter; > import org.apache.mina.transport.socket.nio.NioDatagramAcceptor; > > import com.techm.tnt.protocol.gateway.util.ServerConfigLoader; > > /** > * The abstract class for tcp/ip and udp listeners. > */ > public abstract class AbstractListener { > > /** The logger instance.*/ > private static Logger LOGGER = > Logger.getLogger(AbstractListener.class); > > /** The buffer size constant. */ > protected static final int BUFFER_SIZE = 2048; > > /** > * The method to initialize udp and tcp/ip listeners. > * > * @param portKey > * the port of the udp or tcp/ip listener. > * @throws IOException > * the io exception to be thrown in case of error. > */ > public void init(String portKey) throws IOException { > LOGGER.info("Entering init()"); > AbstractIoAcceptor acceptor = initInternal(); > acceptor.setHandler(new RequestHandler()); > acceptor.getFilterChain().addLast("logger", > new LoggingFilter()); > > acceptor.getSessionConfig().setReadBufferSize(BUFFER_SIZE); > > acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); > if (acceptor instanceof NioDatagramAcceptor) { > ((NioDatagramAcceptor) > acceptor).getSessionConfig().setReuseAddress(true); > } > acceptor.bind(new > InetSocketAddress(Integer.parseInt(ServerConfigLoader.getInstance().getProperty(portKey)))); > LOGGER.info("Exiting init()"); > } > > /** > * The abstract method to be over ridden by appropriate > listener (udp / > * tcp/ip) for invoking appropriate listener. > * > * @return the appropriate (udp/ tcp/ip) io acceptor. > */ > public abstract AbstractIoAcceptor initInternal(); > } > > Appreciate all tour help. > > Thanks & Regards, > Krishan Babbar > > > > ============================================================================================================================ > Disclaimer: This message and the information contained herein is proprietary > and confidential and subject to the Tech Mahindra policy statement, you may > review the policy at http://www.techmahindra.com/Disclaimer.html externally > http://tim.techmahindra.com/tim/disclaimer.html internally within > TechMahindra. > =========================================================================================================================== > > ============================================================================================================================ > > Disclaimer: This message and the information contained herein is proprietary > and confidential and subject to the Tech Mahindra policy statement, you may > review the policy at http://www.techmahindra.com/Disclaimer.html > <http://www.techmahindra.com/Disclaimer.html> externally > http://tim.techmahindra.com/tim/disclaimer.html > <http://tim.techmahindra.com/tim/disclaimer.html> internally within > TechMahindra. > > ============================================================================================================================
