2013-12-10 6 views
5

वाक्यांश "अधिकतम निष्पादन समय" अस्पष्ट है ऑपरेटिंग सिस्टम कॉल द्वारा)।पीएचपी का सही अर्थ max_execution_time

कुबा यहाँ Real max_execution_time for PHP on linux द्वारा बहुत ही दिलचस्प पोस्ट, पाता है कि इस पीएचपी यूनिक्स या Windows पर चल रहा है कि क्या पर निर्भर करता है। संक्षेप में वह पाता है कि यह है यूनिक्स पर (ख) और विंडोज या Cygwin पर है (क)।

लेकिन, मेरा सर्वर लिनक्स 2.6.32-358.18.1.el6.x86_64 # 1 एसएमपी x86_64 x86_64 x86_64 जीएनयू/लिनक्स है, और मेरे पास एक क्रॉन नौकरी है जो 30 सेकंड के बाद ज़ेड हो जाती है, इसके सीपीयू के बावजूद 16 सेकंड से कम समय:

[Tuesday, 10-Dec-2013 10:22:33 GMT] Begin, cputime=0 secs. 
[Tuesday, 10-Dec-2013 10:22:58 GMT] starting zip_close, cputime=10.12946 secs. 
[10-Dec-2013 10:23:03 UTC] PHP Fatal error: Maximum execution time of 30 seconds exceeded in xxx.php on line 149 

यह क्यूबा की खोज के विपरीत है। मेरा PHP 5.3.26 है और IU के साथ सीपीयू समय माप रहा है:

function cputime() { 
    $data = getrusage(); 
    return $data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec']/1000000; 

क्या कोई आगे स्पष्टीकरण दे सकता है?

उत्तर

0

प्रलेखन पर एक नजर है:

http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time

कैसे प्रोग्रामर आवश्यकता यह स्पष्ट रूप से एक और कहानी :) कि कि जिन मामलों में अंतर्निहित ओएस एक बहुत मायने रखती है में से एक है लागू करने का फैसला। विशेष ओएस पर सीपीयू समय के बारे में उपलब्ध एपीआई स्पष्ट रूप से समस्या पर कुछ प्रकाश डालेगी।

यह उच्च स्तरीय आवश्यकता (स्क्रिप्ट चलने का समय) यह संदिग्ध है और ओएस द्वारा कई अलग-अलग तरीकों से व्याख्या की जा सकती है। सबूत आपको मिलने वाले विभिन्न समय हैं।

तो वहाँ कई "सही जवाब", वास्तव में ओएस प्रति एक हैं ...

0

AFAIK यह ओएस पर निर्भर है। ओएस पर निर्भर करता है, समय एक खोल कार्यकारी या उदाहरण (जैसे विंडोज़) होगा या अभ्यस्त के लिए क्वेरी को निष्पादित करने के लिए लिया (जैसे लिनक्स) max_execution_time के लिए ले में शामिल किया।

+0

लेकिन मेरा मुद्दा यह है कि मैं लिनक्स के अधीन हूं और ऐसा लगता है कि यह शुद्ध विलुप्त समय माप का उपयोग कर रहा है। – user3000292

5

यह अपनी स्क्रिप्ट पर पूरी तरह से निर्भर करता है। getrusage यह मापने के लिए एक विश्वसनीय तरीका नहीं है।

  1. स्क्रिप्ट
  2. स्क्रिप्ट के क्रम की स्टार्टअप के बाद से पूर्ण समय है, इसलिए 1. शून्य से सिस्टम को कॉल
  3. वास्तविक समय सीपीयू है: आप 3 माप तरीकों, नहीं 2 के बीच उलझन में रहे हैं व्यस्त, तो 2. प्रतीक्षा राज्यों की वजह से अन्य निष्क्रिय समय और

getrusage उपायों 3, और दस्तावेज नहीं है। जैसे आप विरोधाभासी परिणाम देख रहे हैं - जाहिर है कि आपकी स्क्रिप्ट में सामान्य प्रतीक्षा राज्यों और अन्य निष्क्रिय अवधि के 14 सेकंड हैं, बिना वास्तव में पूरी तरह से उपज करते हैं जैसे system या स्ट्रीमिंग ऑपरेशंस।

PHP दस्तावेज़ों के रूप में विंडोज़ विधि विधि 1 का उपयोग करता है, और * निक्स सिस्टम विधि 2 का उपयोग करता है। कोई भी 3 का उपयोग नहीं करता है क्योंकि यह वास्तव में टाइमआउट के रूप में समझ में नहीं आता है - इसका मतलब यह होगा कि सिस्टम लोड उच्च होने पर टाइमआउट बेहद आक्रामक हो जाता है और राज्यों का इंतजार प्रतीक्षा करें।

+0

"यह पूरी तरह से आपकी स्क्रिप्ट पर निर्भर करता है" - नहीं, यह पूरी तरह से PHP और ऑपरेटिंग सिस्टम के कोड पर निर्भर करता है। "आप उलझन में हैं" - नहीं, मैं नहीं हूं, मैंने एक ऐसे मामले की पहचान की है जहां व्यवहार स्पष्ट रूप से नहीं है कि क्यूबा द्वारा प्राप्त कोड से पता चलता है, और मैं क्यों पूछ रहा हूं। – user3000292

+0

हां यह पूरी तरह से आपकी स्क्रिप्ट पर निर्भर करता है - स्क्रिप्ट में वास्तव में आप जो कर रहे हैं उसके आधार पर 'गेट्रेजेज' अविश्वसनीय रूप से भिन्न होगा। आपने किनारे के मामले की पहचान नहीं की है, आप बस इसे गलत माप रहे हैं। क्यूबा का कहना है कि स्क्रिप्ट को "30 सेकंड प्लस किसी भी गैर-PHP समय" के लिए चलाना चाहिए। आपका लॉग कहता है कि आपकी स्क्रिप्ट 10:22:33 से 10:23:03 तक चलती है, बिल्कुल 30 सेकंड। तो मान लें कि आपने कोई 'सिस्टम' या स्ट्रीमिंग कॉल नहीं किया है, उसका बयान 100% सही है। –

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