জ্যাঙ্গো মেমোরির ব্যবহার হ্রাস করা হচ্ছে। কম ঝুলন্ত ফল?


136

আমার স্মৃতির ব্যবহার সময়ের সাথে সাথে বৃদ্ধি পায় এবং জ্যাঙ্গো পুনরায় চালু করা ব্যবহারকারীদের প্রতি সদয় নয়।

আমি মেমরির ব্যবহারের প্রোফাইল কীভাবে লিখব সে সম্পর্কে নিশ্চিত নই তবে কীভাবে পরিমাপ শুরু করা যায় তার কয়েকটি টিপস কার্যকর হবে।

আমার অনুভূতি আছে যে কিছু সহজ পদক্ষেপ রয়েছে যা বড় লাভ করতে পারে। 'ডিবাগ' নিশ্চিত করা 'মিথ্যা' এ সেট করা একটি সুস্পষ্ট বিগ।

কেউ কি অন্যকে পরামর্শ দিতে পারে? লো ট্রাফিক সাইটগুলিতে কত উন্নতি হবে?

এই ক্ষেত্রে আমি Mod_python সহ অ্যাপাচি ২.x এর অধীনে চলেছি। আমি শুনেছি Mod_wsgi কিছুটা ঝুঁকুনি তবে লাভগুলি উল্লেখযোগ্য হবে যদি আমি না জানি তবে এই পর্যায়ে স্যুইচ করা জটিল হবে।

সম্পাদনা করুন: এখন পর্যন্ত টিপসের জন্য ধন্যবাদ কোনও পরামর্শ কীভাবে মেমরিটি ব্যবহার করছে তা আবিষ্কার করবেন? পাইথন মেমোরি প্রোফাইলিংয়ের কোনও গাইড আছে?

এছাড়াও যেমনটি উল্লেখ করা হয়েছে যে কয়েকটি জিনিস রয়েছে যা মোড_উসজি এ স্যুইচ করা কঠিন করে তুলবে তাই আমি সেই দিকটিতে এগিয়ে যাওয়ার আগে যে লাভগুলি আশা করতে পারি তার কিছু ধারণা রাখতে চাই।

সম্পাদনা: কার্ল এখানে আরও কিছু বিশদ উত্তর পোস্ট করেছেন যা পড়ার মতো: জ্যাঙ্গো মোতায়েন: অ্যাপাচের ওভারহেড কাটা

সম্পাদনা: গ্রাহাম ডাম্পলটনের নিবন্ধটি আমি এমপিএম এবং মোড_উজগি সম্পর্কিত স্টাফগুলিতে সবচেয়ে ভাল খুঁজে পেয়েছি। আমি বরং হতাশ হয়েছি যে অ্যাপটিতে মেমরির ব্যবহার ডিবাগ করার বিষয়ে কেউই কোনও তথ্য সরবরাহ করতে পারেনি।

চূড়ান্ত সম্পাদনা: আচ্ছা আমি এটিকে ওয়েবফেকশনের সাথে আলোচনা করে দেখছি তারা অ্যাপাচি পুনরায় সংশোধন করতে সহায়তা করতে পারে কিনা এবং এই বিষয়টিতে তাদের কথা:

"আমি সত্যিই ভাবি না যে এমপিএম কর্মী + মোড_উইজি সেটআপে স্যুইচ করে আপনি খুব বেশি উপকৃত হবেন। আমি অনুমান করি যে আপনি প্রায় 20 এমবি বাঁচাতে পারবেন, তবে সম্ভবত এর চেয়ে বেশি কিছু নয়।"

তাই! এটি আমাকে আমার আসল প্রশ্নে ফিরে আসে (যার বিষয়ে আমি এখনও জ্ঞানী নই)। সমস্যাগুলি কোথায় রয়েছে তা সনাক্ত করার জন্য কীভাবে যায়? এটি একটি সুপরিচিত ম্যাক্সিম যা আপনি কোথায় অপ্টিমাইজ করতে হবে তা পরীক্ষা না করেই অপ্টিমাইজ করবেন না তবে পাইথন মেমরির ব্যবহার পরিমাপের টিউটোরিয়ালগুলির পথ খুব কম এবং জ্যাঙ্গোর কোনও নির্দিষ্ট নেই।

সবার সহায়তার জন্য ধন্যবাদ তবে আমি মনে করি এই প্রশ্নটি এখনও উন্মুক্ত!

আরেকটি চূড়ান্ত সম্পাদনা ;-)

আমি এটি জাঙ্গো-ব্যবহারকারীদের তালিকায় জিজ্ঞাসা করেছি এবং কিছু খুব সহায়ক উত্তর পেয়েছি

সত্যিই সর্বশেষ আপডেট!

এটি সবে মুক্তি পেয়েছে। এখনও সেরা সমাধান হতে পারে: পিম্পলারের সাহায্যে জ্যাঙ্গো অবজেক্টের আকার এবং মেমরির ব্যবহারের প্রোফাইল দেওয়া

উত্তর:


50

আপনি ডেটাতে বিশ্বব্যাপী রেফারেন্স রাখছেন না তা নিশ্চিত করুন। এটি অজগর আবর্জনা সংগ্রহকারীকে স্মৃতি ছেড়ে দিতে বাধা দেয়।

ব্যবহার করবেন না mod_python। এটি অ্যাপাচের ভিতরে একটি দোভাষীকে বোঝায়। আপনার যদি অ্যাপাচি ব্যবহার করতে হয় তবে mod_wsgiতার পরিবর্তে ব্যবহার করুন। এটি স্যুইচ করা কঠিন নয়। এটা খুবই সহজ. মস্তিষ্ক-মৃতের চেয়ে জাঙ্গোরmod_wsgi জন্য কনফিগার করা সহজ উপায় mod_python

আপনি যদি আপনার প্রয়োজনীয়তা থেকে অ্যাপাচি সরিয়ে ফেলতে পারেন তবে এটি আপনার স্মৃতিশক্তি থেকে আরও ভাল be spawningপাইথন ওয়েব অ্যাপ্লিকেশনগুলি চালানোর নতুন দ্রুত স্কেলযোগ্য উপায় বলে মনে হচ্ছে।

সম্পাদনা : আমি দেখছি না কিভাবে mod_wsgi স্যুইচ "হতে পারে চতুর "। এটি একটি খুব সহজ কাজ করা উচিত। আপনি যে স্যুইচটি নিয়ে যাচ্ছেন তা দয়া করে বিশদ দিন।


4
@ জোশ: আপনি যদি অ্যাপাচি-কেবলমাত্র বৈশিষ্ট্যগুলি ব্যবহার না করেন তবে অ্যাপাচের ফোলা এবং মেমরির ব্যবহার বোকা। এটি কেবল একটি অপ্রয়োজনীয় স্তর।
nosklo

3
জ্যাঙ্গো এখনও মোডপ্যাথনের সমর্থন করে কারণ মোড_উজি এখনও মোটামুটি নতুন এবং তারা রক্ষণশীল হতে চান। তবে আপনি যদি জ্যাঙ্গো সম্প্রদায়টি অনুসরণ করেন তবে আপনি দেখতে পাবেন লোকেরা মোড_উইজি এবং ম্যাসে স্যুইচ করছে। প্রস্তাবিত বিকল্পটি হওয়ার আগে এটি বেশি সময় নেয় না।
কার্ল মায়ার

1
@ টিয়াগো: অ্যাপাচি ভাল যখন আপনি ইতিমধ্যে স্থানে অনেকগুলি অ্যাপাচি ভার্চুয়াল হোস্ট রেখেছেন, ইতিমধ্যে অ্যাপাচি সহ এসএসএল ব্যবহার করছেন ইত্যাদি। এই ক্ষেত্রে, মোড_উজি ব্যবহার করুন। আপনি যদি নতুন করে শুরু করে থাকেন তবে স্পোনিং ব্যবহার করুন। কখনও Mod_python ব্যবহার করুন।
nosklo

1
ধন্যবাদ, নসক্লো আমি স্প্যানিংয়ের দিকে এক নজরে নিচ্ছি .. মনে হচ্ছে খুব কমই ডকুমেন্টেশন আছে .. আমি ব্লগ পোস্টগুলিতে পাওয়া কিছু নির্দেশাবলীর অনুসরণ করার চেষ্টা করব এবং আমি কোথায় পেতে পারি তা দেখুন।
টিয়াগো

1
হুম, কেউ কেউ শুধু জ্যাঙ্গো ব্যবহার শুরু করার সাথে সাথে আমি মনে রাখব যে আমার মোড_উজি ব্যবহার করা উচিত।
পাওয়ারলর্ড

28

আপনি যদি মোড_উজির অধীনে চলছেন এবং সম্ভবত এটি ডাব্লুএসজিআই অনুগত হওয়ার কারণে ছড়িয়ে পড়ে তবে আপনি আপনার স্মৃতি ব্যবহারের জন্য নজর রাখতে ডোজার ব্যবহার করতে পারেন ।

Mod_wsgi এর অধীনে আপনার ডাব্লুএসজিআই স্ক্রিপ্টের নীচে এটি যুক্ত করুন:

from dozer import Dozer
application = Dozer(application)

তারপরে আপনার সমস্ত মেমোরি বরাদ্দের একটি তালিকা দেখতে আপনার ব্রাউজারটি HTTP: // ডোমেন / _ডোজার / সূচকে নির্দেশ করুন।

আমি শুধু Mod_wsgi এর জন্য আমার ভয়েস যোগ করব add এটি Mod_python এর তুলনায় পারফরম্যান্স এবং মেমরির ব্যবহারের ক্ষেত্রে এক পার্থক্য তৈরি করে। সক্রিয় বিকাশের ক্ষেত্রে এবং মেলিং তালিকায় থাকা লোকদের তাদের ইনস্টলেশনটি অনুকূলকরণে সহায়তা করার ক্ষেত্রে Mod_wsgi এর জন্য গ্রাহাম ডাম্পলটনের সমর্থন অসামান্য। অভিশাপ ডটকমের ডেভিড ক্র্যামার কয়েকটি চার্ট পোস্ট করেছে (যা আমি দুর্ভাগ্যজনকভাবে এখন খুঁজে পাচ্ছি না) সিপিইউ এবং মেমরির ব্যবহারের তীব্র হ্রাস দেখিয়ে তারা উচ্চ ট্রাফিক সাইটে মোড_উজগি পরিবর্তন করে। বেশ কয়েকটি জ্যাঙ্গো দেব স্যুইচ করেছেন। গম্ভীরভাবে, এটি একটি বুদ্ধিমান :)


সেই ক্ষেত্রে আমি শীঘ্রই একটি প্রশ্ন পোস্ট করব যা জ্যাঙ্গো ব্যবহারকারীদের স্থিতিশীল ফাইল অ্যাক্সেসের জন্য কীভাবে কুকি ভিত্তিক প্রমাণীকরণ পায় ...
অ্যান্ডি বেকার

15

এগুলি পাইথন মেমরির প্রোফাইল সমাধানগুলির বিষয়ে আমি সচেতন (জ্যাঙ্গো সম্পর্কিত নয়):

দাবি অস্বীকার: আমার উত্তরোত্তর একটি অংশ আছে।

পৃথক প্রকল্পের ডকুমেন্টেশনে আপনাকে পাইথন অ্যাপ্লিকেশনগুলির মেমরির আচরণ বিশ্লেষণ করতে কীভাবে এই সরঞ্জামগুলি ব্যবহার করবেন সে সম্পর্কে একটি ধারণা দেওয়া উচিত।

নিম্নলিখিতটি একটি দুর্দান্ত "যুদ্ধের গল্প" যা কিছু সহায়ক পয়েন্টার দেয়:


5

অতিরিক্ত হিসাবে, আপনি পরিচিত কোনও ফাঁসকারী ব্যবহার করেন না কিনা তা পরীক্ষা করে দেখুন। মাইএসকিউএলডিবি ইউনিকোড হ্যান্ডলিংয়ে বাগের কারণে জ্যাঙ্গোর সাথে প্রচুর পরিমাণে মেমরি ফাঁস করতে পারে। তা ছাড়াও জ্যাঙ্গো ডিবাগ সরঞ্জামদণ্ড আপনাকে হোগগুলি ট্র্যাক করতে সহায়তা করতে পারে।


amix.dk/blog/viewEntry/19420 মাইএসকিউএলডিবি মেমরি ফাঁস করছে তা দেখাতে ডজার ব্যবহার করা হচ্ছে shows মাইএসকিউএলডিবি 1.2.3c1 এবং পরে এটি ঠিক করে।
মিস্যান্ডার্স

কিভাবে django-debug-toolbarসাহায্য করতে পারে?
ওয়াটওয়ার

4

বৃহত ডেটা অবজেক্টগুলির জন্য বিশ্বব্যাপী রেফারেন্সগুলি না রাখার পাশাপাশি, যেখানেই সম্ভব বড় মাপের ডেটাसेट মেমোরিতে লোড করা এড়াতে চেষ্টা করুন।

ডিমন মোডে Mod_wsgi এ স্যুইচ করুন এবং প্রিফের্কের পরিবর্তে অ্যাপাচি কর্মী এমপিএম ব্যবহার করুন। এই পরবর্তী পদক্ষেপটি আপনাকে অনেক কম সহকারী ব্যবহারকারীদের অনেক কম মেমরির ওভারহেড সহ পরিবেশন করতে দেয়।


কার্লের উত্তরও এখানে দেখুন: stackoverflow.com/questions/488864/…
অ্যান্ডি বেকার

এছাড়াও - কয়েকটি পোস্টে আমি দেখেছি দেখে মনে হচ্ছে যে আসল লাভটি মোড_উসগি ব্যবহারের পরিবর্তে কর্মী এমপিএমের দিকে চলে যাওয়া ...
অ্যান্ডি বাকের

4

ওয়েবফ্যাকশনটিতে জ্যাঙ্গো মেমরির ব্যবহার কম রাখার জন্য কিছু টিপস রয়েছে ।

প্রধান বিষয়গুলি:

  • নিশ্চিত করুন যে ডিবাগটি মিথ্যাতে সেট করা আছে (আপনি এটি ইতিমধ্যে জানেন)।
  • আপনার অ্যাপাচি কনফিগারেশনে "সার্ভারলিমিট" ব্যবহার করুন
  • কোনও বড় বস্তু মেমরিতে লোড হচ্ছে না তা পরীক্ষা করুন
  • একটি পৃথক প্রক্রিয়া বা সার্ভারে স্থির বিষয়বস্তু পরিবেশন বিবেচনা করুন।
  • আপনার অ্যাপাচি কনফিগারেশনে "ম্যাক্সরেইকুইস্টস্পিয়ারচিল্ড" ব্যবহার করুন
  • আপনি কত স্মৃতি ব্যবহার করছেন তা সন্ধান করুন এবং বুঝুন

2
ধন্যবাদ, আমি ইতিমধ্যে সেগুলি পড়েছি। এটি 3 এবং 6 নম্বর আমি কিছুটা আরও বিশদ জন্য আশা ছিল! ;-)
অ্যান্ডি বেকার 18

3

মোড_উসগির জন্য আরও একটি প্লাস: maximum-requestsআপনার WSGIDaemonProcessনির্দেশিকায় একটি প্যারামিটার সেট করুন এবং মোড_উসগি প্রায়শই প্রায়শই ডেমন প্রক্রিয়া পুনরায় আরম্ভ করবে। ব্যবহারকারীর জন্য কোনও দৃশ্যমান প্রভাব থাকতে হবে না, ধীরে ধীরে পৃষ্ঠার লোড ব্যতীত প্রথমবার কোনও নতুন প্রক্রিয়া আঘাত হানার পরে এটি জাজানো এবং আপনার অ্যাপ্লিকেশন কোডটিকে মেমরিতে লোড করবে।

কিন্তু এমনকি যদি আপনি কি মেমরি তথ্য ফাঁসের, যে অনেক বড় হয়ে প্রক্রিয়া আকার রাখা উচিত, আপনার ব্যবহারকারীদের কাছে বিঘ্ন সেবা করেও আছে।


1
অনুরূপ কিছু এখানে উল্লেখ করা হয়েছে: mail-archive.com/django-users@googlegroups.com/msg84698.html কেবলমাত্র সর্বাধিক-অনুরোধগুলির পরিবর্তে নিষ্ক্রিয়তা-সময়সীমা ব্যবহার করেছেন।
টমাস অ্যান্ড্রেল

3

আমি মোড_উজগির জন্য যে স্ক্রিপ্টটি ব্যবহার করি তা এখানে (ডাব্লুএসজি.পি নামে পরিচিত, এবং আমার জ্যাঙ্গো প্রকল্পটি মূলের মধ্যে দিয়ে দেওয়া হয়েছে):

import os
import sys
import django.core.handlers.wsgi

from os import path

sys.stdout = open('/dev/null', 'a+')
sys.stderr = open('/dev/null', 'a+')

sys.path.append(path.join(path.dirname(__file__), '..'))

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
application = django.core.handlers.wsgi.WSGIHandler()

মাইপ্রজেক্ট.সেটিংস এবং প্রয়োজনীয় পথটি সামঞ্জস্য করুন। আমি সমস্ত আউটপুট / dev / নালগুলিতে পুনঃনির্দেশ করি যেহেতু ডিফল্টরূপে mod_wsgi মুদ্রণ প্রতিরোধ করে। পরিবর্তে লগিং ব্যবহার করুন।

অ্যাপাচি জন্য:

<VirtualHost *>
   ServerName myhost.com

   ErrorLog /var/log/apache2/error-myhost.log
   CustomLog /var/log/apache2/access-myhost.log common

   DocumentRoot "/var/www"

   WSGIScriptAlias / /path/to/my/wsgi.py

</VirtualHost>

আশা করি এটি কমপক্ষে আপনাকে মোড_উইজি সেট আপ করতে সহায়তা করবে যাতে আপনি এটি দেখতে পারেন কোনও পার্থক্য রয়েছে কিনা।


1

ক্যাশে: নিশ্চিত হয়ে নিন যে সেগুলি বহিষ্কার করা হচ্ছে। কোনও ক্যাশে অবতরণ করা সহজ, তবে ক্যাশে রেফারেন্সের কারণে কখনই GC'd হবেন না।

সুইগ কোড: নিশ্চিত করুন যে কোনও মেমরি পরিচালনা সঠিকভাবে চলছে, বিশেষত তৃতীয় পক্ষের লাইব্রেরি সহ অজগরটিতে এটি মিস করা সত্যিই সহজ Make

পর্যবেক্ষণ: আপনি যদি পারেন তবে মেমরির ব্যবহার এবং হিটগুলি সম্পর্কে ডেটা পান। সাধারণত আপনি একটি নির্দিষ্ট ধরণের অনুরোধ এবং মেমরির ব্যবহারের মধ্যে একটি সম্পর্ক দেখতে পাবেন।


1

আমরা বড় সাইটম্যাপস (10.000 আইটেম) দিয়ে জাজানোতে একটি বাগের পিছনে হোঁচট খেয়েছি। দেখে মনে হচ্ছে সাইটম্যাপ তৈরি করার সময় জাঙ্গো এগুলি সমস্তই মেমোরিতে লোড করার চেষ্টা করছে: http://code.djangoproject.com/ticket/11572 - গুগল যখন সাইটটিতে একটি দর্শন প্রদান করে তখন অ্যাপাচি প্রক্রিয়াটিকে কার্যকরভাবে হত্যা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.