2013-11-21 15 views
6

मेरे पास एक पर्ल डांसर वेब एप्लिकेशन है जो अपाचे 2 से mod_fastcgi सेवारत विधि का उपयोग करता है। आवेदन अपलोड की गई फाइलों को स्वीकार करना है। जब कोई उपयोगकर्ता फ़ाइल अपलोड कर रहा है और स्टॉप बटन दबाता है, तो फास्टसीजी प्रक्रिया लटकती है, जब तक कि मैं मैन्युअल रूप से प्रक्रिया को मार नहीं जाता तब तक 100% पर चल रहा है।लंबे समय तक चलने वाली फास्टसी प्रक्रियाओं को मारना

क्या कोई ऐसी सेटिंग है जो स्वचालित रूप से ऐसी प्रक्रिया को मार सकती है जो इस तरह लटका हुआ है? क्या एक निश्चित समय के लिए चल रहे एक फास्टसी प्रक्रिया को स्वचालित रूप से मारने का कोई तरीका है?

+1

मैं तुम्हें समझने के लिए क्यों यह में अटक जाती है की जरूरत है:

तो मैं एक छोटी पर्ल स्क्रिप्ट है, जो रूट के रूप में चलाया जाता है, सही नाम और नर्तकी mod_fastcgi सर्वर उदाहरणों की उम्र के साथ नौकरियों को मारने के लिए लिखा था 100% पहले, अगर यह mod_fastcgi की गलती या आपका कोड है। यदि यह आपका कोड है, तो देखें कि यह कहां फंस जाता है, अगर यह mod_fastcgi की गलती है, तो अपनी साइट – nrathaus

उत्तर

0

चूंकि मुझे जिस फ़ंक्शन में रूचि है, वह mod_fastcgi के साथ एक विकल्प नहीं है और मुझे प्रक्रिया को मारने के लिए समय :: आउट में कोड को लपेटने के लिए कोड का हिस्सा नहीं दिख रहा है। मैंने सोचा कि मैं अपने हैक किए गए समाधान को साझा करूंगा।

मैंने ऐसा करने के लिए एक एकल लिनक्स कमांड की खोज की, लेकिन हत्यारे ने काम नहीं किया (यह विशेष रूप से उस सर्वर इंस्टेंस को चलाने वाले पर्ल कमांड को नहीं ढूंढ पाएगा) और पीकेल या तो नहीं था (उम्र निर्दिष्ट नहीं कर सका मारने की प्रक्रिया का)।

#!/usr/bin/perl -w 

use Proc::ProcessTable; 

$t = new Proc::ProcessTable('cache_ttys' => 1); 

foreach $p (@{$t->table}){ 
    if ($p->cmndline =~ /perl.*dispatch.fcgi/) { 
     my $run_time_min = $p->time/(1000000*60); 
     if ($run_time_min >= 15) { 
      # print "Found this job to kill: ". $p->pid . $p->cmndline."\n". $run_time_min . "\n"; 
      kill 'KILL', $p->pid; 
     } 
    } 
} 
2

नहीं, यह mod_fastcgi द्वारा समर्थित नहीं है।

कहा, आप कई विकल्प हैं:

  • समय समाप्त आधारित मॉड्यूल में अपने पर्ल कोड, जैसे Time::Out लपेटें।
  • ulimit -t का उपयोग करें ताकि उसके CPU कोटा खत्म होने के बाद कर्नेल रनवे प्रक्रिया को मार सके।

दूसरा समाधान लागू करने में कुछ मुश्किल होगा, क्योंकि आप पूरी अपाचे प्रक्रिया को मारना नहीं चाहते हैं। इसे Unix StackExchange question में विस्तार से समझाया गया है।

+0

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

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