Apache2 को 4 कोर उपयोग तक बढ़ाएं, PHP चल रहा है


सीएलआई प्रश्न के लिए सीएलआई में और नीचे पढ़ें, जिसे केवल कन्वेंशन में जोड़ा गया है! धन्यवाद!


मैंने एक स्क्रिप्ट लिखी है जो 48.1 एमबी के साथ लगभग 160'000 प्रविष्टियों की एक xml फ़ाइल और 31.1 एमबी के साथ 150'000 प्रविष्टियों की एक टेक्स्ट फ़ाइल को संसाधित करती है, जिसमें बाहरी फाइलों, भारी इंटरलिंकिंग और रिकर्सिव चेक के लिए कुछ निर्देशिका खोज और परिणाम स्वरूपित होते हैं और सभी एचटीएमएल फाइलों में सहेजा गया।

निश्चित रूप से, मैंने प्रोग्राम जोड़े के समय की समीक्षा की और सबसे कुशल कोड के साथ समाप्त हुआ जो मैं सोच सकता था। यह एक स्थानीय कार्यक्रम है और जनरेटर को नियमित रूप से चलाने की आवश्यकता नहीं है। कोई तर्क दे सकता है कि मुझे PHP की तुलना में दूसरी भाषा का उपयोग करना चाहिए, लेकिन सरल xml के साथ PHP, आदि मेरे लिए और इस उद्देश्य के लिए सबसे अच्छा काम करता है। इसके अलावा एक set_time_limit ('70000') मुझे परेशान नहीं करता है।

हालांकि, यहां मेरा प्रश्न है, क्या मेरे लिनक्स सिस्टम पर apache2 बनाना संभव है, मेरे PHP सीपीयू चलाने वाले मेरे 4 सीपीयू कोर का उपयोग करें? यहां तक ​​कि यदि मैं प्रक्रिया को विभाजित करता हूं और एक साथ कई अनुरोध करता हूं, तो CPU उपयोग एक समय में 1 CPU से ऊपर नहीं जा सकता है।

मैंने इस विषय को गुमराह किया लेकिन समाधान नहीं मिला, इसलिए मुझे इसे रात में चलाने की ज़रूरत हो सकती है, भले ही, मैं उस चीज़ को बढ़ावा देने के लिए कुछ मदद की सराहना करता हूं !!!

ADDED INFO - And here a picture of my processes: enter image description here

CLI: मुझे linux टर्मिनल में निष्पादित करने के लिए मेरी index.php को कॉल करने की आवश्यकता है। लेकिन मैं स्क्रिप्ट में चार पोस्ट वैरिएबल ($ _POST ['example']) भेजना चाहता हूं। उस के शीर्ष पर, मैं कुछ आउटपुट फ़ाइल में अपने echos प्रस्तुत करने के लिए देख रहा हूँ। क्या कोई भी इन 4 पोस्ट चरों को ट्रैक करने के लिए टर्मिनल कमांड और PHP कमांड के साथ जल्दी से मदद कर सकता है:

if (PHP_SAPI === 'cli')
{
  //...
} 

? ... क्षमा करें, लेकिन यह मेरी पहली PHP-cli बातचीत है। धन्यवाद!

0
जोड़ा संपादित
विचारों: 1
संभव नहीं: ओह! आपका उत्तर सबमिट नहीं किया जा सका क्योंकि: 100 से कम प्रतिष्ठा वाले उपयोगकर्ता पूछने के 8 घंटे बाद अपने प्रश्न का उत्तर नहीं दे सकते हैं। आप 4 घंटों में आत्म-जवाब दे सकते हैं। तब तक कृपया टिप्पणियों का उपयोग करें, या इसके बजाय अपना प्रश्न संपादित करें।
जोड़ा लेखक systrue, स्रोत
set_time_limit (0) इसे कुछ मनमाने ढंग से उच्च संख्या में सेट करने से बेहतर होगा।
जोड़ा लेखक ThiefMaster, स्रोत
यह हर किसी के लिए बहुत स्पष्ट होगा यदि आप एक प्रश्न के रूप में अपना प्रश्न छोड़ देंगे और पोस्ट के जवाब के रूप में इसे हल करेंगे।
जोड़ा लेखक Zombaya, स्रोत

4 उत्तर

SOLUTION, THX TO ThiefMaster and Zebediah49 recommending cli and my friend who supported me with the links: http://ch.php.net/manual/en/reserved.variables.argv.php/http://ch.php.net/manual/en/function.getopt.php

और यहां मैं क्लिप के माध्यम से PHP कैसे कॉल करता हूं:

//whenRunFromCLI
//callCLI
//php index.php './data/xyfullFile1.xml' './data/xxfullFile2.utf' 0 60000
//php index.php './data/xyfullFile1.xml' './data/xxfullFile2.utf' 60000 120000
//php index.php './data/xyfullFile1.xml' './data/xxfullFile2.utf' 120000 all
if (PHP_SAPI === 'cli'){
    $_POST['xml'] = $argv[1];
    $_POST['example'] = $argv[2];
    @$_POST['rangeFrom'] = $argv[3];
    @$_POST['rangeTo'] = $argv[4];
}

and the Result of calling the PHP file in three terminals: enter image description here

मुझे पता है, मुझे अपनी वर्चुअल मशीन पर कुछ और रैम देना होगा, भाग्यशाली है कि मेरे पास अभी भी 8 जीबी अतिरिक्त है ;-)

चीयर्स और शांति!

0
जोड़ा

नहीं, एक एकल PHP स्क्रिप्ट कभी भी कई धागे का उपयोग नहीं करेगी और इस तरह हमेशा एकल कोर पर चलती है।

इस बात पर निर्भर करता है कि आप जो चीजें करते हैं, वे एक दूसरे पर निर्भर करते हैं, आप उन्हें आसानी से कई धागे पर विभाजित नहीं कर पाएंगे।

0
जोड़ा
इसे एक शॉट देने वाला ... क्या आपके पास क्ली के उपयोग के बारे में अच्छा संसाधन है? मैं एक सेटिंग स्क्रीन से कुछ चर पोस्ट करता हूं और php.net पर क्ली विवरण देखने के बाद ऐसा करने के लिए कोई संकेत नहीं है। हो सकता है कि मैं ध्यान से पढ़ने के लिए बहुत आलसी हूं लेकिन आप जानते हैं कि यह कैसे है, अगर मैं एक बेहतर मैनुअल पा सकता हूं, thx!
जोड़ा लेखक systrue, स्रोत
मैं और कौन सा पर्यावरण PHP चलाऊंगा? xamp (जीत के लिए अपाचे) इसे ईथर में सुधार नहीं करेगा ...
जोड़ा लेखक systrue, स्रोत
मैंने कोशिश की, लेकिन फिर भी मेरा अपाचे केवल एक सीपीयू का उपयोग करता है, यहां तक ​​कि कई अनुरोध भी हैं। शायद मैं अपनी विन्यास में सुधार कर सकता हूं? मेरा मतलब है कि मेरा अपाचे अन्य अनुरोधों पर 1 से अधिक सीपीयू का उपयोग करता है, लेकिन इस विशेष php-file/prog पर नहीं ...
जोड़ा लेखक systrue, स्रोत
यह एक समाधान नहीं है लेकिन एक अच्छा कामकाज है। मैंने अपनी वर्चुअल मशीन को लिनक्स/apache2 के साथ क्लोन करने के लिए उसी प्रक्रिया में किक करने के लिए क्लोन किया है, लेकिन अलग-अलग वीएम पर फ़ाइल/प्रक्रिया के विभिन्न हिस्सों को होस्ट किया है, जो मेजबान सिस्टम प्रत्येक वर्चुअल सिस्टम के लिए एक कोर लागू करने देता है, इस तरह मैं प्रक्रिया को तोड़ सकता हूं कारक के चारों ओर समय 4. आपकी पोस्ट के लिए धन्यवाद!
जोड़ा लेखक systrue, स्रोत
हां, बिल्कुल जवाब जो मैंने अपेक्षित था, लेकिन पूछने लायक था! धन्यवाद!
जोड़ा लेखक systrue, स्रोत
क्यों नहीं कई PHP प्रक्रियाओं को चलाने के लिए ?! यह बहुत कम ओवरकिल होगा ...
जोड़ा लेखक ThiefMaster, स्रोत
आप इसके लिए अपाचे का उपयोग क्यों कर रहे हैं?
जोड़ा लेखक ThiefMaster, स्रोत
निश्चित रूप से php-cli (कमांडलाइन)।
जोड़ा लेखक ThiefMaster, स्रोत

संपादित करें: लेखक की प्रतिक्रिया

यह एक समाधान नहीं है लेकिन एक अच्छा कामकाज है। मैंने अपनी वर्चुअल मशीन को लिनक्स/apache2 के साथ क्लोन करने के लिए उसी प्रक्रिया में किक करने के लिए क्लोन किया है, लेकिन अलग-अलग वीएम पर फ़ाइल/प्रक्रिया के विभिन्न हिस्सों को होस्ट किया है, जो मेजबान सिस्टम प्रत्येक वर्चुअल सिस्टम के लिए एक कोर लागू करने देता है, इस तरह मैं प्रक्रिया को तोड़ सकता हूं कारक के चारों ओर समय 4. आपकी पोस्ट के लिए धन्यवाद!

===============

यदि यह स्थानीय है, और आप इसे हर बार चलाने के लिए चाहते हैं, तो आपको शायद इसे cron नौकरी से ही आमंत्रित करना चाहिए। इस तरह, आप जो भी काम कर रहे हैं उसके लिए आप एक प्रक्रिया तैयार कर सकते हैं। यदि आप वास्तव में इसके लिए PHP का उपयोग करना चाहते हैं, तो आप क्रॉन लाइन से ऐसा करने के लिए PHP को भी आह्वान कर सकते हैं।

कोई भी कम नहीं, ऐसा लगता है कि आप किसी भी तरह से एक अंतर्निहित एकल-थ्रेडेड प्रक्रिया कर रहे हैं, और यदि आप इसे तेज़ी से चाहते हैं, तो शायद उस चीज़ का उपयोग करना चाहिए जो इसके लिए PHP नहीं है।

0
जोड़ा
आपको मिल गया, मैं क्ली कोशिश कर रहा हूँ। अभी तक इसका उपयोग नहीं किया है और मुझे स्क्रिप्ट में कुछ पोस्टिंग चर को संभालने की ज़रूरत है, जिसे मैं आमतौर पर ब्राउज़र में सेट करता हूं। मेरा मतलब है कि कमांड लाइन सरल है, बस उन आदेशों को पोस्ट करना मुझे कुछ मैनुअल पढ़ने की जरूरत है। शायद आपको एक अच्छा संसाधन मिला?
जोड़ा लेखक systrue, स्रोत
मैं उन्हें क्ली पर नहीं बुलाता लेकिन फ़ायरफ़ॉक्स या कुछ अन्य ब्राउज़र। मैंने इसे कई अनुरोधों के साथ बाहर से apache vm के भीतर से परीक्षण किया। कुछ लाइनों पर शुरू करने के लिए बस लेखन समारोह को परिभाषित करना। इसलिए मैं 0-60000, दूसरा 60000-120000 और तीसरा 120000-अंत बनाने का अनुरोध करता हूं। ऐसा लगता है जैसे अपाचे दूसरे और तीसरे अनुरोध को खत्म करने के लिए इंतजार कर रहा है।
जोड़ा लेखक systrue, स्रोत
ऊपर मेरा परिवर्तन प्रश्न देखें! सीएलआई ने मेरे लिए काम किया !!! धन्यवाद
जोड़ा लेखक systrue, स्रोत
वास्तव में मेरी समस्या है, मैंने ऐसा किया है और किसी कारण से मेरा वीएम अभी भी उन एकाधिक कॉलिंग के लिए एक सीपीयू कोर का उपयोग करता है। मेरे पास कोई सुराग नहीं है क्यों?
जोड़ा लेखक systrue, स्रोत
यह एक समाधान नहीं है लेकिन एक अच्छा कामकाज है। मैंने अपनी वर्चुअल मशीन को लिनक्स/apache2 के साथ क्लोन करने के लिए उसी प्रक्रिया में किक करने के लिए क्लोन किया है, लेकिन अलग-अलग वीएम पर फ़ाइल/प्रक्रिया के विभिन्न हिस्सों को होस्ट किया है, जो मेजबान सिस्टम प्रत्येक वर्चुअल सिस्टम के लिए एक कोर लागू करने देता है, इस तरह मैं प्रक्रिया को तोड़ सकता हूं कारक के चारों ओर समय 4. आपकी पोस्ट के लिए धन्यवाद!
जोड़ा लेखक systrue, स्रोत
अरे, मेरे अपने प्रश्न का उत्तर देने के लिए पर्याप्त प्रतिष्ठा नहीं है, तो यहां यह है:
जोड़ा लेखक systrue, स्रोत
हां, इसके लिए 100% उपयोग पर एक सीपीयू कोर हर समय होता है। और निर्देशिका खोज एक मामूली कार्य है। हालांकि, धन्यवाद ... मैंने सोचा कि एक स्मार्ट तरीका है लेकिन यह आईओ-बाउंड के साथ स्पष्ट प्रतीत होता है। मुझे इसके लिए एक कामकाज भी मिला ... मेरा जवाब पढ़ें!
जोड़ा लेखक systrue, स्रोत
हाँ, क्रॉन वह है जो मैं उन चीजों को मेरी उपस्थिति से बाहर चलाने के लिए उपयोग कर रहा हूं। ऐसा लगता है कि मुझे i7-2600 सीपीयू की आवश्यकता नहीं है, लेकिन एक बुरे गधे के साथ कुछ तेजी से यूनी कोर सीपीयू। आपके त्वरित उत्तर के लिए धन्यवाद!
जोड़ा लेखक systrue, स्रोत
यह कुछ समझ में आता है; यह शायद अनुरोधों को चेन करने वाला कुछ है (सर्वर को अधिभारित करने के बजाय, प्रत्येक क्लाइंट को एक समय में एक अनुरोध लौटाया जाता है)। "सर्वर" को विभाजित करने का अर्थ है कि फ़ायरफ़ॉक्स सोचता है कि यह अलग-अलग सर्वर है, और अपाचे प्रक्रिया वास्तव में अलग-अलग सर्वर हैं। यदि आप सीधे क्ली से पार्सर को बुलाते हैं तो यह वही काम करता है यदि मैं वही काम करता हूं।
जोड़ा लेखक zebediah49, स्रोत
आह, मैं (और मैं दूसरों को सोचता हूं) ने इस सवाल का अर्थ दिया "मेरे पास धीमी लिपि है, जादुई मल्टीथ्रेड बटन कहां है?"। हालांकि यह पूरी तरह से अजीब है; आप उन्हें कैसे बुला रहे हैं?
जोड़ा लेखक zebediah49, स्रोत
यदि आप इसे अलग-अलग वीएम में अलग-अलग हिस्सों में विभाजित कर सकते हैं, तो आप इसे उसी वीएम पर अलग-अलग हिस्सों में क्यों विभाजित नहीं कर सकते हैं, बस इसे प्रत्येक भाग पर कई बार बुला रहे हैं?
जोड़ा लेखक zebediah49, स्रोत
अरे, i7 खुद को एकल-कोर में बदल देगा यदि इस समय ऐसा करने के लिए कुछ भी बेहतर नहीं है: पी। वैसे भी, आप इसे तोड़कर इसे मल्टीथ्रेड कर सकते हैं। उदाहरण के लिए, यह "बाहरी फ़ाइलों के लिए निर्देशिका खोज करता है" लगता है जैसे ढूंढें/कहीं भी /> /somewhere/listOfFiles.txt , समय से पहले चलाएं और फिर उस अनुक्रमणिका फ़ाइल को खोजें, या ऐसा कुछ। ऐसा लगता है कि आप शायद कुछ और की तुलना में अधिक IO- बाध्य हैं। क्या आप वाकई इस पर प्रो कोर को अधिकतम कर रहे हैं?
जोड़ा लेखक zebediah49, स्रोत

शायद आप स्पार्क का उपयोग कर सकते हैं! यह एक PHP lib है जो आपको PHP प्रक्रिया को एकाधिक में फोर्क करने की अनुमति देता है।

<?php

use Spork\Deferred\DeferredFactory;
use Spork\ProcessManager;

$manager = new ProcessManager(new DeferredFactory());
$manager->fork(function() {
   //do something in another process!
})->then(function($output, $status) {
   //do something in the parent process when it's done!
});

https://github.com/kriswallsmith/spork

0
जोड़ा
धन्यवाद, अगली बार जब मैं इसे आजमाऊंगा, तो मैंने पहले से ही प्रक्रिया को विभाजित कर दिया है, इसलिए यह अब मेरी लिपि में कुछ भी नहीं बदलेगा
जोड़ा लेखक systrue, स्रोत
मुझे यकीन नहीं है कि क्या मैं इस पुस्तकालय के अस्तित्व से प्रभावित हूं या भयभीत हूं .... हालांकि कुछ स्थितियों में यह काफी उपयोगी लगता है।
जोड़ा लेखक zebediah49, स्रोत