GeoApiContext should clean up working threads on exit.
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Comece com com.google.maps.GeoApiContext, com.google.maps.OkHttpRequestHandler e com.google.maps.internal.RateLimitExecutorService, mencionados no stack trace; rastreie como o caminho PlacesApi.placeAutocomplete cria e gerencia suas threads de trabalho. Reproduza o ciclo de vida da requisição relatado e verifique se os contextos podem ser encerrados sem deixar threads nativas para trás.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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?
- Linguagem predominante
- Java
- Estrelas
- 1.8k
- Forks
- 972
- Merge médio
- 5h 7min
- PRs com merge (30d)
- 1
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de googlemaps/google-maps-services-java
-
PlacesApi.placeDetails(context, placeId).await() interface errorTalvez já em andamento @madtriceps assumiu há 99 dias. Abertatriage me type: bug
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 48/100
-
[email protected]Abertatriage me type: feature request
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 10/100
-
Bagg hacmAberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 5/100
googlemaps/google-maps-services-java#1059 · 1 reação ·
-
Issue in java daAberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 10/100
-
Issue in java daAberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 10/100
Todas as issues de googlemaps/google-maps-services-java
Issues semelhantes
-
Area-UIUX Issue-Bug Issue-Easy (good first issue)
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
TeamAmaze/AmazeFileManager#4769 ·
Mantenedores costumam responder em até 7 dias
-
Expose SManga.memo & SChapter.memo fields in GraphQL APIs to support source-specific client featuresAbertaenhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Suwayomi/Suwayomi-Server#2551 ·
Mantenedores costumam responder em até 9 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
weaviate/java-client#631 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 2 dias