Php apache2 में जावा चलाएं


1

मैंने एक साधारण PHP फ़ाइल लिखी है जो एक जावा एप्लिकेशन कहती है।

यह समस्याओं के बिना cli पर चलता है, लेकिन मैं इसे ब्राउज़र पर नहीं चला सकता।

आउटपुट:

"Java HotSpot(TM) 64-Bit Server VM warning: INFO:os::commit_memory(0x00007ff590053000, 2555904, 1) failed; error='Permission denied' (errno=13) 
# # There is insufficient memory for the Java Runtime Environment to continue. 
# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory. 
# An error report file with more information is saved as: # /tmp/hs_err_pid14930.log "

मेरे द्वारा यह कैसे किया जा सकता है?


कोड जोड़ें अपने PHP आवेदन
एंटोन Dozortsev

मैंने समस्या हल कर दी है। यह SELINUX द्वारा मेमोरी सुरक्षा है।
बंदर

जवाबों:


1

ऐसा लगता है कि आप अधिकतम मेमोरी सीमा को मार रहे हैं: जावा लगभग 2.5mb के लिए पूछ रहा है और इसे प्राप्त नहीं कर सकता है। अजीब बात यह है कि यह बहुत ज्यादा नहीं है, लेकिन ज्यादातर शायद जेआरई छवि को ही शामिल नहीं करते हैं, इसलिए यह बहुत अधिक होगा।

PHP मेमोरी लिमिट (/etc/php.ini) को चेक करें और / या बढ़ाएं, कुछ इस प्रकार है:

memory_limit = 128M

कॉन्फ़िगरेशन के आधार पर आप इसे .php में भी कर सकते हैं:

ini_set ('memory_limit', '128M');

मामले में /tmp/hs_err_pid14930.log पोस्ट करने से त्रुटि होने का संकेत देने के साथ-साथ बहुत मददगार होगा!


मैं आप की तरह सेट। लेकिन इसमें अभी भी समस्या है। और मेरे पास 2GB फ्री और सिस्टम पर 4GB स्वैप है। हो सकता है अपाचे इसे सीमित कर दे।
बंदर

यह मुफ्त रैम / स्वैप के बारे में नहीं है, लेकिन वास्तव में एक सीमा के बारे में है जो आपकी प्रक्रिया को जन्म देती है। यदि आपको संदेह है (256 या 512 या तो डाल दिया गया है) तो भी एक सीमा के साथ प्रयास करें। बस हर बार मामले में अपाचे को पुनरारंभ करने के लिए याद रखें। उस लॉग इन / tmp को भी भेजें ताकि हम और अधिक मदद कर सकें।
fede.evol

धन्यवाद। मैं देखता हूं कि लॉग यही संदेश है। मैं एक विंडोज मशीन पर स्विच करता हूं। सभी डिफ़ॉल्ट विकल्पों के साथ सेट करें (WAMPP, Java ...) -> यह काम करता है। मैं इसे लिनक्स में ठीक करने की कोशिश करूँगा (जावा संस्करण हो सकता है, अलिमेट या किसी और चीज़ से हो सकता है)
बंदर

1

मामले में किसी और को SELinux को स्पष्ट रूप से अक्षम किए बिना इसे हल करने के लिए एक रास्ता की तलाश है, तो centos.org पर विकी पेज ने मुझे यह समझने में मदद की कि क्या चल रहा था।

डिफ़ॉल्ट रूप से, अपाचे से बुलाया जाने पर जावा में चल रहा सुरक्षा संदर्भ किसी फाइल को पढ़ने, मेमोरी आवंटित करने, नेटवर्क को एक्सेस करने आदि जैसी चीजों की अनुमति नहीं देता है। इन त्रुटियों को हल करने का सबसे आसान तरीका है सेमोड्यूल और ऑडिट 2 क्लॉक एप्लिकेशन का उपयोग करना। अनिवार्य रूप से, SELinux ऑडिट लॉग (/var /logs/audit/audit.log हो सकता है) की जांच करें, लेकिन मैंने / var / log / संदेशों का उपयोग किया और एवीसी त्रुटियों को निकाला)। लॉग में आपको चीजों को देखना चाहिए

avc: pid = 21415 comm = "java" के लिए {getattr} से इनकार किया

तथा

avc: pid = 21319 comm = "java" के लिए {open} से इनकार किया

वास्तव में, आप निष्पादन, मेमोरी आवंटन और कई अन्य नीतियों के बारे में देखेंगे जिन्हें आप उल्लंघन कर रहे हैं क्योंकि SELinux एप्लिकेशन को चलाने से रोकने और लागू करने के लिए सेट है।

अपने ऑडिट लॉग के साथ नीचे ऑडिट 2 चलाएं:

aud2allow -M myapppolicy <aud.log

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

पॉलिसी पैकेज को सक्रिय बनाने के लिए निम्नलिखित को चलाएँ और फिर अपनी प्रक्रिया को पुनः प्रयास करें। आपके पास पहले से एक्सेस करने के बाद आपका जावा ऐप उम्मीद के मुताबिक सब कुछ पाने के लिए कई प्रयास कर सकता है क्योंकि आपका जावा ऐप कुछ अन्य पॉलिसी का उल्लंघन कर सकता है। मैं जावा एप्लिकेशन की एक श्रृंखला के लिए इन चरणों को लगभग पांच बार निष्पादित करता हूं जो मैं स्क्रिप्ट के माध्यम से php के माध्यम से चला रहा था।

semodule -i myapppolicy.pp

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.