Sto usando regole di sicurezza mod https://github.com/SpiderLabs/owasp-modsecurity-crs per disinfettare i dati di input dell'utente. Sto affrontando cpu sparare e ritardare nel corrispondere l'input dell'utente con le espressioni regolari della regola di sicurezza mod. Nel complesso contiene 500+ espressione regolare per controllare diversi tipi di attacchi (XSS, badrobots, generico e SQL). Per ogni richiesta, analizzo tutti i parametri e controllo tutte queste 500 espressioni regolari. Sto usando Matcher.find
per controllare i parametri. In questo caso alcuni parametri cadono in loop infinito, l'ho affrontato usando la tecnica di sotto.Java: Matcher.find utilizzando elevato utilizzo della CPU
Cancelling a long running regex match?.
disinfettare una richiesta dell'utente sono voluti circa ~ 500 ms e CPU% spara alto. Ho analizzato utilizzando visualvm.java.net con il mio runner di test suite.
Cpu profilo di destinazione
favore mi aiuti a ridurre il% e carico medio di utilizzo della CPU?
Secondo lo screenshot 'checkPattern' è stato chiamato 212148825 volte pari a 6100774ms, che rende 0,02ms per chiamata. Non vedo un problema di prestazioni lì - e sicuramente nessuna prova di 500ms per invocazione. –
Se ci sono schemi particolari che causano ritardi più lunghi, dovresti identificarli e includerli nella tua domanda. – Holger
@Il tempo richiesto dall'Holger non è un problema. La mia preoccupazione riguarda solo il carico e l'utilizzo della CPU. Voglio processare i parametri in parallelo, Se l'ho fatto, il mio carico medio è andato a> 4.Ho preso il dump del thread usando 'jstack -l' e ho trovato il thread di consumo massimo usando' thread -H -b -p 'e ho convertito l'id in codice esadecimale, il thread che consuma CPU alta (50%) sono in stato di esecuzione in Matcher .trova. –
kannanrbk