web-dev-qa-db-fra.com

Spring Boot - Un grand nombre de demandes non valides et d’acceptation du socket ont échoué

J'ai la machine en cours d'exécution avec l'application Spring (Spring Boot 1.5.2.RELEASE). Récemment, je reçois beaucoup d’avertissements dans mon fichier journal:

.w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: null; nested exception is Java.net.SocketTimeoutException

J'ai vérifié avec tcpdump et de nombreuses demandes n'ont pas de corps (vide/nul) ou ont un corps incorrect, par exemple. \00\00\00\00\00\00\00speed":"23.3","user_id":106312}

Le plus gros problème est qu'après un certain temps, je commence à recevoir des exceptions dans mon application:

org.Apache.Tomcat.util.net.NioEndpoint   : Socket accept failed

Java.io.IOException: Too many open files
    at Sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at Sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.Java:241)
    at org.Apache.Tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.Java:443)
    at Java.lang.Thread.run(Thread.Java:745)

ulimit -n indique que la limite du nombre de fichiers ouverts est définie sur 65536. Je pense donc que sa taille est suffisante.

Je suppose que recevoir un grand nombre de demandes non valides provoque une exception IOException, mais pourquoi? Et que dois-je faire pour l'éviter et le réparer?

9
user3626048

Je suppose que vous utilisez une prise Web avec une botte à ressort. Vous ne pouvez écouter que sur le port 65535 maximum. Vous ne pouvez pas dépasser cette valeur sur une machine. Vous devriez vérifier si vous fermez correctement vos sockets.

1
Djory Krache