क्यों इतने सारे gettimeofday कॉल?


11

PHP / Apache कॉम्बो इतने सारे gettimeofdaysyscalls क्यों करता है ? भले ही आप जल्दी हर कॉल एक कॉल है जिसका हिसाब होना चाहिए।

बस एक त्वरित strace -c -p [apache2 process id], निम्नलिखित देता है:

Process 22294 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.52    0.010000          51       196           poll
  1.48    0.000150           0     20752           gettimeofday
  0.00    0.000000           0        94         7 read
  0.00    0.000000           0        48           write
  0.00    0.000000           0        96        32 open
  0.00    0.000000           0        75           close
  0.00    0.000000           0         6           chdir
  0.00    0.000000           0       766           time
  0.00    0.000000           0         2           chmod
  0.00    0.000000           0        56        10 access

उन 20K कॉल मुझे चिंता है। किसी को भी इस पर कुछ प्रकाश डाला परवाह है?


जावा और भी खराब है ...
निल्स

आपका कार्यक्रम क्या कर रहा है?
माइकल हैम्पटन

1
मैं "क्यों" का जवाब नहीं दे सकता हूं, लेकिन क्या आप stackoverflow.com/questions/7266813/… और access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/ ... से अवगत हैं ? आमतौर पर syscall को यूजर स्पेस कोड ("vsyscall") में मैप किया जाएगा, इसलिए ओवरहेड को काफी कम किया जाएगा।
wabbit

1
गिनती आपको चिंता नहीं करनी चाहिए। पोल में केवल 200 कॉल हैं, लेकिन यह समय के 98% से अधिक का उपयोग करता है। आप सामान्य स्ट्रेस आउटपुट पर स्विच कर सकते हैं, फिर आप देखेंगे कि अपाचे क्या कर रहा है (इसे धीमा कर देगा)।
ott-- २४:१३ पर २४:१३

जवाबों:


4

गेटाइम-डे को ज्यादातर अपाचे द्वारा डिबग-फाइलों में प्रविष्टियों को लॉग करने के लिए कहा जाता है। इसके अलावा कुछ मॉड्यूल gettimeofday का उपयोग करते हैं। तो चिंता की कोई बात नहीं।

संपादित करें: मैंने कुछ php स्रोत कोड खुदाई की और निम्नलिखित परिणामों के साथ आया: अधिकांश समय संबंधित php फ़ंक्शन सिस्टम समय का उपयोग करेंगे। चूंकि वे सिस्टम समय का उपयोग करते हैं, इसलिए गेटटाइमऑफडे को बहुत कुछ कहा जाएगा, यदि आप कॉल रिडक्ट करना चाहते हैं, तो अपने समय से संबंधित कार्यों को कम करें।

मुझे यह टिप्पणी करनी होगी कि अन्य कार्य भी गेटटाइम-कॉल करते हैं। उदाहरण के लिए यदि आप php_session_start का उपयोग करते हैं, तो यह (कभी-कभी, कुछ मापदंडों पर निर्भर करता है, जैसे कि यदि एक नया सत्र, ...) php_combined_lcg को कॉल करें जो उसके बीज में कोई मान नहीं होने पर lcg_seed के लिए कॉल करेगा। एक छद्म यादृच्छिक संख्या प्राप्त करें। और lcg_seed एक gettimeofday कॉल करेगा। इसे ध्यान में रखो।


लेकिन क्या होगा अगर मेरी CLI PHP स्क्रिप्ट भी करता है बहुत gettimeofday कॉल की? क्या मेरी php में कुछ गड़बड़ है? (यानी तारीख () या mktime () उन कार्यों का उपयोग करें अगर मैं एक
paramas के

थोड़ा खोजा और मेरे जवाब को संपादित किया
टाइममीह

धन्यवाद ... मुझे लगता है कि मुझे बस उन सभी कॉल के साथ रहना है। :)
गेकी

यदि आपने xdebugस्थापित किया है, तो यह इसका एक प्रतिफल भी हो सकता है।
B00MER

1

मुझे पता चला है कि php मॉड्यूल, xdebug होने के कारण, स्ट्रेस के कारण कई gettimeofdayकॉल की रिपोर्ट करने में सक्षम होता है ।


1

प्रत्येक प्रक्रिया जिसे टाइमस्टैम्प कॉल की आवश्यकता होती है, गेटटाइमऑफडे, इसलिए यह जानना मुश्किल है कि यह सामान्य है या नहीं।

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

  • Mod_log_debug या mod_status जैसे सामान्य संदिग्धों को अक्षम करें
  • अपाचे का कॉन्फ़िगरेशन पुनः लोड करें
  • strace
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.