2012-04-07 13 views
7

मैं आमतौर पर अपने सैंडबॉक्स एपिड पर एपस्टैट पूर्णकालिक चलाता हूं। हालांकि, मेरे पास एक जटिल ऑपरेशन है (मूल रूप से स्टॉक डेटाबेस का पुनर्निर्माण) जो एपस्टैट्स को मेरे उदाहरण को उड़ाता है, आउटऑफमेमरी एरर्स फेंक देता है। यहां तक ​​कि बड़े उदाहरण आकार के साथ, यह अभी भी विफल रहता है। Appstats बस बहुत ज्यादा राम चाहता है।ऐप इंजन/जावा पर एक ही अनुरोध के लिए मैं एपस्टैट कैसे निलंबित कर सकता हूं?

मैं इस अनुरोध पर appstats जरूरत नहीं है। आदर्श रूप में मैं जो कुछ भी थ्रेडलोकल ऑब्जेक्ट एपस्टैट संग्रह के लिए ज़िम्मेदार है, उसे एक विधि कहूंगा और इसे कुछ मिनटों के लिए अपने अंगूठे को घुमाने के लिए कहूंगा।

मैंने कुछ यूआरएल को अनदेखा करने के लिए AppstatsFilter को विस्तारित करने पर विचार किया है, लेकिन अपमानजनक अनुरोध एक स्थगित कार्य के रूप में निष्पादित करता है और पथ द्वारा इसकी पहचान कुछ जटिल है।

मैं कैसे को रोकने के लिए appstats बता सकते हैं?

बस के मामले में यह स्पष्ट नहीं है: appstats विकलांग के साथ अपने एप्लिकेशन का एक संस्करण अपलोड किया जा रहा है, मेरे कार्य चल रहा है, तो appstats सक्षम के साथ एक संस्करण अपलोड अब मैं क्या कर रहा है। मैं यह नहीं करना चाहता।

+0

मैं सिर्फ यूआरएल आप पर नजर रखी चाहते हैं के लिए में भी शामिल होने के लिए एक विकल्प है संभालने हूँ नहीं? एफडब्ल्यूआईडब्ल्यू मैं जो भी आप एक से अधिक बार पूछ रहा हूं वह करने में सक्षम होना चाहता था, लेकिन मैंने बुलेट को थोड़ा सा किया और केवल उन यूआरएल की सूची बनाई जिन्हें हमें मॉनीटर करने और कॉन्फ़िगरेशन में रखने की आवश्यकता थी। –

+0

दुर्भाग्यवश यूआरएल जिसे मैं बाहर करना चाहता हूं वह है/_ah/queue/__ deferred__। मैं शायद एक अतिरिक्त यूआरएल पर DeferredTaskServlet को माउंट कर सकता हूं और इस विशिष्ट अनुरोध को रूट कर सकता हूं, लेकिन ऐसा लगता है कि आरक्षण से काफी दूर जा रहा है। – stickfigure

+0

क्या आपने कभी यह पता लगाया है? – Keith

उत्तर

1

अच्छा प्रश्न है। पायथन के लिए, उत्तर सरल है:

from google.appengine.ext.appstats import recording 

class ...(webapp.RequestHandler): 
    def get(self): 
    recording.dont_record() 
    ... 

शायद जावा में एक समान API है?

वैकल्पिक रूप से, फिर से अजगर संस्करण बाहर जो रिकॉर्ड करने के लिए अनुरोध करता है छानने की एक लचीला तरीका है; मुझे लगता है कि जावा संस्करण में आप अपने web.xml में प्रविष्टियों का उपयोग करके एक समान चीज़ को पूरा कर सकते हैं। (देखें जावा डॉक्स appstats।)

+0

मैं एसडीके स्रोत कोड में एक जावा बराबर नहीं मिल रहा है, और दुर्भाग्य से प्रासंगिक यूआरएल मानक __deferred__ कार्य यूआरएल है। इस तरह की एक विधि बिल्कुल वही है जो मैं देख रहा हूं! – stickfigure

1

जेफ, मुझे आश्चर्य है कि इस OutOfMemoryErrors की घटना को कम करने के लिए आपकी मदद कर सकते हैं कि: How to reduce the memory usage of Appstats on Google App Engine Java

<filter> 
    <filter-name>appstats</filter-name> 
    <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class> 
    <init-param> 
     <param-name>maxLinesOfStackTrace</param-name> 
     <param-value>16</param-value> 
    </init-param> 
</filter> 
+1

एक आदर्श समाधान नहीं है लेकिन निश्चित रूप से सहायक - धन्यवाद! – stickfigure

2

मैं क्या मेरे अपने CustomAppstatsFilter लिख सकते हैं और कुछ यूआरएल के बाहर करते है।

public class CustomAppstatsFilter extends AppstatsFilter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 

    if (request instanceof HttpServletRequest) { 
     String url = ((HttpServletRequest) request).getRequestURL().toString(); 

     // We do not want these to show up in appstats 
     if ((url.contains("appstats")) 
       || url.contains("_ah/") 
       || url.contains("cron/") 
       || url.contains("batch/")) { 
      chain.doFilter(request, response); 
      return; 
     } else { 
      super.doFilter(request, response, chain); 
     } 
    } 
    } 
} 

संपादित करें - यह ZiglioNZ महान जवाब के साथ जोड़ा जा सकता है।

<!-- Appstats filter for profiling application --> 
<filter> 
    <filter-name>appstats</filter-name> 
    <filter-class>my.company.filter.CustomAppstatsFilter</filter-class> 
    <init-param> 
     <param-name>maxLinesOfStackTrace</param-name> 
     <param-value>5</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <!-- excludes are in CustomAppstatsFilter --> 
    <filter-name>appstats</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

यह लगभग चाल करता है, लेकिन यूआरएल स्थगित कार्य निष्पादन यूआरएल है, जो सभी स्थगित कार्यों पर लागू होता है। मुझे जो चाहिए वह पाइथन के dont_record() के बराबर है जो मैं अपने कोड में चला सकता हूं। – stickfigure

+0

[इस लेख] की तरह (https://developers.google.com/appengine/articles/deferred) बताते हैं, अगर आपको कतारबद्ध और निष्पादित करने के तरीके पर पूर्ण नियंत्रण की आवश्यकता है, तो आपको कार्य कतार API का उपयोग करने की आवश्यकता है। ;-) – lucdc

+0

मुझे कतारबद्ध और निष्पादित करने के तरीके पर पूर्ण नियंत्रण की आवश्यकता नहीं है या नहीं; वह sledgehammers के साथ मक्खियों पर swatting है। मैं बस एपस्टैट अधिक सुंदरता से विफल होना चाहता हूँ। पायथन के लिए एक एपीआई है, लेकिन जाहिर है जावा जावा नहीं है :( – stickfigure

संबंधित मुद्दे

 संबंधित मुद्दे