GeoApiContext should clean up working threads on exit.
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia con com.google.maps.GeoApiContext, com.google.maps.OkHttpRequestHandler e com.google.maps.internal.RateLimitExecutorService, indicati nello stack trace; segui il modo in cui il percorso PlacesApi.placeAutocomplete crea e gestisce i propri thread di lavoro. Riproduci il ciclo di vita della richiesta segnalato e verifica che i contesti possano terminare senza lasciare thread nativi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello guys, I had a problem while doing a PlacesApi.placeAutocomplete request
I really don't know if that is a issue caused by the API or on our implementation.
We are developing an application that uses:
- Spring Boot
1.3.6.RELEASE Undertowcom.google.maps:google-maps-services:0.1.17
# application.properties
server.undertow.worker-threads=1000
server.undertow.io-threads=100
# EC2 AWS
m4.xlarge
# Dockerfile
FROM java:8
RUN apt-get update && apt-get install -y
WORKDIR /app
VOLUME /root/.gradle
COPY gradle/ /app/gradle/
COPY gradlew /app/gradlew
COPY build.gradle /app/build.gradle
COPY src/ /app/src/
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["java","-jar","/app/build/libs/application-1.0.0.jar"]
# docker-entrypoint.sh
#!/bin/bash
set -e
./gradlew build -x test
exec "$@"
@Service
public class GoogleMapsAPIService {
public List placeAutoComplete(String input, Double latitude, Double longitude, String language) {
GeoApiContext context = new GeoApiContext().setApiKey(GOOGLEMAPS_KEY);
LatLng location = new LatLng(latitude, longitude); // -23.52488881961586,-46.67578987777233
AutocompletePrediction[] autocompletePredictions = PlacesApi.placeAutocomplete(context, input)
.location(location)
.language("pt-BR")
.radius(1000)
.awaitIgnoreError();
return assemblyPrediction(autocompletePredictions);
}
private List assemblyPrediction(AutocompletePrediction[] autoCompletePredictions) {
List<Prediction> predictions = new ArrayList<>();
for (AutocompletePrediction autocompletePrediction : autoCompletePredictions) {
String placeId = autocompletePrediction.placeId;
String title = autocompletePrediction.terms[0].value;
String subTitle = Arrays.stream(autocompletePrediction.terms).skip(1).map(term -> term.value).collect(Collectors.joining(", "));
predictions.add(new Prediction(placeId, title, subTitle));
}
return predictions;
}
}
Sometimes we get this exception:
2017-04-19 19:11:03,290 [XNIO-3 task-914] DEBUG org.springframework.web.servlet.DispatcherServlet - Last-Modified value for [/predictions] is: -1
2017-04-19 19:11:03,290 [XNIO-3 task-914] INFO com.application.services.GoogleMapsAPIService - GoogleMapsAPIService.placeAutoComplete
2017-04-19 19:11:03,290 [XNIO-3 task-914] DEBUG com.application.services.GoogleMapsAPIService - > Passenger: [7459]
2017-04-19 19:11:03,291 [XNIO-3 task-914] DEBUG com.application.services.GoogleMapsAPIService - > Input: [Alameda santos 2081]
2017-04-19 19:11:03,291 [XNIO-3 task-914] DEBUG com.application.services.GoogleMapsAPIService - > Latitude: [-23.52488881961586]
2017-04-19 19:11:03,291 [XNIO-3 task-914] DEBUG com.application.services.GoogleMapsAPIService - > Longitude: [-46.67578987777233]
2017-04-19 19:11:03,291 [XNIO-3 task-914] DEBUG com.application.services.GoogleMapsAPIService - > Language: [pt-BR]
2017-04-19 19:11:03,291 [XNIO-3 task-914] DEBUG com.application.services.GoogleMapsAPIService - > Radius: [1000]
2017-04-19 19:11:03,291 [XNIO-3 task-914] DEBUG org.springframework.web.servlet.DispatcherServlet - Could not complete request
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread
at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1305)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:979)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:281)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
at com.google.maps.internal.RateLimitExecutorService.<init>(RateLimitExecutorService.java:63)
at com.google.maps.OkHttpRequestHandler.<init>(OkHttpRequestHandler.java:49)
at com.google.maps.GeoApiContext.<init>(GeoApiContext.java:88)
at com.application.services.GoogleMapsAPIService.placeAutoComplete(GoogleMapsAPIService.java:175)
at com.application.controllers.PredictionsController.predictions(PredictionsController.java:31)
Stacktrace:
stacktrace.txt
Do you know what could causes that?
- Lingua principale
- Java
- Stelle
- 1.8k
- Fork
- 972
- Merge medio
- 5h 7m
- PR unite (30g)
- 1
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di googlemaps/google-maps-services-java
-
PlacesApi.placeDetails(context, placeId).await() interface errorForse già presa @madtriceps l’ha presa 99 giorni fa. Apertatriage me type: bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
-
[email protected]Apertatriage me type: feature request
Difficoltà 5/5 Più di una settimana Idoneità per principianti 10/100
-
Bagg hacmAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 5/100
googlemaps/google-maps-services-java#1059 · 1 reazione ·
-
Issue in java daAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 10/100
-
Issue in java daAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 10/100
Tutte le issue di googlemaps/google-maps-services-java
Issue simili
-
Area-UIUX Issue-Bug Issue-Easy (good first issue)
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
TeamAmaze/AmazeFileManager#4769 ·
I maintainer di solito rispondono entro 7 giorni
-
Expose SManga.memo & SChapter.memo fields in GraphQL APIs to support source-specific client featuresApertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Suwayomi/Suwayomi-Server#2551 ·
I maintainer di solito rispondono entro 9 giorni
-
CLI: enforce absolute ADB device paths in file and directory commandsForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
weaviate/java-client#631 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni