প্রক্রিয়াটি ইন্টারেক্টিভভাবে সঞ্চালনের চেয়ে নির্ধারিত কাজ হিসাবে ধীর গতিতে চলে


41

আমার একটি সিডিউড টাস্ক রয়েছে যা খুব সিপিইউ- এবং আইও-নিবিড়, এবং এটি চালাতে প্রায় চার ঘন্টা সময় নেয় (বিল্ডিং সোর্স কোড, যদি আপনি আগ্রহী হন)। টাস্কটি একটি পাওয়ারশেল স্ক্রিপ্ট যা বিভিন্ন উপ-প্রক্রিয়াগুলি এর কাজটি সম্পাদন করে। আমি যখন একই ব্যবহারকারীর অ্যাকাউন্ট হিসাবে পাওয়ারশেল প্রম্পট থেকে একই প্রক্রিয়াটি ইন্টারেক্টিভভাবে চালিত করি, এটি প্রায় আড়াই ঘন্টার মধ্যে চলে। উইন্ডোজ সার্ভার 2008 আর 2 এ কাজটি চলছে।

আমি যা জানতে চাই তা কেন নির্ধারিত টাস্ক হিসাবে চালাতে এত বেশি সময় নেয় - এক ঘণ্টারও বেশি সময়। একটি জিনিস আমি লক্ষ্য করেছি যে টাস্ক শিডিয়ুলার নীচে-স্বাভাবিক অগ্রাধিকারে চলে, সুতরাং যখন আমার কাজটি শুরু হয়, এটি একই নিম্ন অগ্রাধিকারের উত্তরাধিকার সূত্রে প্রাপ্ত হয়। তবে আমি পাওয়ারশেল প্রক্রিয়াটির অগ্রাধিকারটিকে স্বাভাবিকের দিকে ফিরিয়ে আনার জন্য স্ক্রিপ্টটি আপডেট করেছি এবং এটি এখনও আরও দীর্ঘ সময় নেয়।

কারও ধারণা আছে যে দুটি পরিস্থিতির মধ্যে আলাদা কী হতে পারে? আমি প্রসেসর এবং আইও লোডের মধ্যে পার্থক্যগুলি এড়িয়ে গেছি - এই টাস্কটি কেবলমাত্র সিস্টেমটির জন্য ব্যবহার করা হয়, সুতরাং সংস্থানগুলির জন্য প্রতিযোগিতামূলক হতে পারে এমন আর কিছুই নেই।


কোন আপডেট? আপনি কী খুঁজে পেতে পারেন তা দেখার জন্য আমি খুব কৌতূহলী।
এমফিনি

আমি যা মনে করি তার কারণটি আমি খুঁজে পেয়েছি; নীচে আমার উত্তর দেখুন।
চার্লি

উইন্ডোজ 10 ফল ক্রিয়েটর হিসাবে, এই সমস্যাটি এখনও বিদ্যমান এবং @ জেসন ম্যাথিসনের কাজের সমাধান (টাস্ক শিডিয়ুলার সম্পাদনা করুন। এক্সএমএল ফাইল) এখনও সেরা সমাধান।
BSalita

উত্তর:


36

দেখা যাচ্ছে যে এখানে কাজের জন্য "নিয়মিত" প্রক্রিয়া অগ্রাধিকারের চেয়ে বেশি কিছু রয়েছে। আমি প্রশ্নটিতে উল্লেখ করেছি যে, ডিফল্টরূপে টাস্ক শিডিয়ুলার আপনার কার্যকে সাধারণ অগ্রাধিকারের চেয়ে কম রান করে। স্ট্যাকওভারফ্লোতে এই প্রশ্নটি বর্ণনা করে যে কোনও সাধারণ অগ্রাধিকারে চালানোর জন্য কোনও কাজ কীভাবে ঠিক করা যায়, তবে ঠিক এখনও একটি জিনিস কিছুটা আলাদা রাখে: মেমরির অগ্রাধিকার। মেমোরির অগ্রাধিকারটি উইন্ডোজ ভিস্তার জন্য একটি নতুন বৈশিষ্ট্য ছিল এবং এটি এই টেকনেট নিবন্ধে বর্ণিত হয়েছে । আপনি প্রসেস এক্সপ্লোরার ব্যবহার করে মেমরির অগ্রাধিকারটি দেখতে পাচ্ছেন যা কোনও প্রশাসক বা প্রোগ্রামারকে অবশ্যই আবশ্যক একটি সরঞ্জাম।

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

অগ্রাধিকার বাড়ানোর বিষয়ে তথ্যের জন্য, আইও অগ্রাধিকার সম্পর্কে সম্পর্কিত স্ট্যাকওভারফ্লো প্রশ্নের আমার উত্তর দেখুন ; সেটিং মেমরি অগ্রাধিকারটি একইভাবে এনটিসেটইনফরমেশন প্রসেসের মাধ্যমে PROCESS_INFORMATION_CLASSসেট করা হয় ProcessMemoryPriority(এর মান 39 বা 0x27)। আমি অন্যদের এটির প্রয়োজন হয় এবং যদি প্রোগ্রামার সরঞ্জামগুলিতে অ্যাক্সেস না থাকে তবে আমি এটি নির্ধারণ করতে ব্যবহার করতে পারি এমন একটি বিনামূল্যে ইউটিলিটি তৈরি করতে পারি make

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


এক্সিকিউটেবলের নামের উপর ডাবল ক্লিক করে, "পারফরম্যান্স" ট্যাবটি খোলার মাধ্যমে এবং "ফিজিকাল মেমোরি" এর অধীনে "স্মৃতি অগ্রাধিকার"
মোশে

17

সমস্যাটি হ'ল আপনার প্রক্রিয়াটি কম I / O অগ্রাধিকার এবং কম মেমরির অগ্রাধিকার দিয়ে শুরু হচ্ছে। এটি যাচাই করার সহজতম উপায় হ'ল সিসিনটার্নালগুলি থেকে প্রক্রিয়া অন্বেষণকারী। আপনি যদি এই নির্ধারিত টাস্কটি থেকে উদ্ভূত কোনও প্রক্রিয়ার বৈশিষ্ট্য দেখেন, আপনি দেখতে পাবেন যে এটির I / O অগ্রাধিকার কম এবং 2 এর মেমরির অগ্রাধিকার রয়েছে।

এখানে এই সমস্যার সমাধান:

  1. টাস্ক তৈরি করুন
  2. টাস্কটিতে ডান ক্লিক করুন এবং এটি "রফতানি করুন"
  3. আপনি সদ্য রফতানি করা টাস্ক.এমএল ফাইল সম্পাদনা করুন
  4. এর মতো একটি লাইন পাবেন <Priority>7</Priority>
  5. মানটিকে একটি সাধারণ অগ্রাধিকারে পরিবর্তন করুন (4-6 এর মধ্যে)। সম্ভাব্য মানগুলির একটি সারণী: টাস্কসেটিংস.প্রিয়রিটি সম্পত্তি
    • 4 এর মানের একটি ইন্টারেক্টিভ প্রক্রিয়া হিসাবে একই I / O এবং মেমরির অগ্রাধিকার থাকবে। 5 এবং 6 এর মানগুলিতে মেমরির অগ্রাধিকার কম থাকবে
  6. টাস্ক শিডিয়ুলারে আপনি প্রথমে তৈরি টাস্কটি মুছুন
  7. টাস্ক শিডিয়ুলারে, ক্রিয়া ক্ষেত্রে, এক্সএমএল ফাইল থেকে টাস্কটি আমদানি করুন

দুর্ভাগ্যক্রমে জিইউআই থেকে তফসিলযুক্ত কাজের প্রাথমিক অগ্রাধিকার সংশোধন করার কোনও উপায় নেই।


পরামর্শের জন্য ধন্যবাদ. নিয়মিত প্রক্রিয়া অগ্রাধিকার এবং আইও অগ্রাধিকার অবশ্যই এটির একটি অংশ, এবং অন্য অংশটি মেমরির অগ্রাধিকার। আরও তথ্যের জন্য গৃহীত উত্তর দেখুন।
চার্লি

কোনও এক্সএমএল ফাইলে টাস্কটি রফতানি করার পরে আপনার ইউনিকোড থেকে এএনএসআইতে অক্ষর এনকোডিং পরিবর্তন করতে হতে পারে। উইন্ডোজ সার্ভার ২০০৮ আর 2 এ, রফতানিটি একটি ইউনিকোড ফাইল এবং আপনি যখন এটিকে আবার আমদানির চেষ্টা করেন, ত্রুটি বার্তা The format of the task is not valid. The following error was reported: (1,2)::দেওয়া হয়। এএনএসআইতে ফাইলটি সংরক্ষণ করা আমার জন্য এটি সমাধান করুন।
এরিক অ্যান্ডারসন 21

আপনাকে অনেক ধন্যবাদ, এটি সত্যই সেরা সমাধান। দস্তাবেজের উল্লেখ অনুসারে, উচ্চতর সিপিইউ অগ্রাধিকার পেতে আপনি অগ্রাধিকারটিকে আরও উচ্চতর (কমপক্ষে 1 পর্যন্ত) সেট করতে পারেন।
রুন আমোডট

যে কারও জন্য ভেবে আপনি রেজিস্ট্রিতে এটি ঝাঁকুনির জন্য সক্ষম হতে পারেন, বিরক্ত করবেন না, খুব সুন্দর সম্পাদনযোগ্য উপায়ে সেখানে উপস্থিত হবে বলে মনে হয় না।
নিক

1

আপনি যদি এটি নির্ধারিত টাস্ক হিসাবে ইউজার এক্স হিসাবে চালানোর জন্য সেট করে থাকেন এবং এটি চালানোর আগে ইউজার এক্স হিসাবে লগইন করেন, এটি চলাকালীন আপনার সেশনে একটি উইন্ডো খোলা উচিত, এটি আপনার সেশনে চলবে।

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

আরেকটি ধারণা: এটি নির্ধারিত টাস্ক হিসাবে চালানোর সময় - এখন আপনি আপনার স্ক্রিপ্টে অগ্রাধিকারটি স্থির করেছেন যে উপ-প্রক্রিয়াগুলি সমস্ত সাধারণ, বা নীচে-সাধারণ হিসাবে চালিত হয়?


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

প্রক্রিয়াটি নিজেই এমন কোনও নেটওয়ার্ক অ্যাক্সেস করতে হবে না যা আপনি জানেন এটির জন্য সমস্যা হতে পারে। সিসিনটার্নালস থেকে এই পোস্টটি পড়ুন এবং দেখুন যেহেতু আপাতদৃষ্টির সাথে সম্পর্কিত নয় এমন কিছু কীভাবে ঝুলিয়ে / আস্তে হতে পারে। blogs.technet.com/b/markrussinovich/archive/2005/08/28/…
এমফিনি

1

নির্ধারিত কাজগুলি ডিফল্টরূপে কম অগ্রাধিকারে চলে।

prioউচ্চ অগ্রাধিকার জোর করতে ব্যবহার করুন ।


আপনি ঠিক বলেছেন যে তারা নিম্ন অগ্রাধিকারে চলে, তবে আমি যেমনটি উল্লেখ করেছি, ইতিমধ্যে আমি এর জন্য দায়বদ্ধ হয়েছি। প্রক্রিয়া অগ্রাধিকার ব্যতীত অন্য কিছু অগ্রাধিকার নেই যার সম্পর্কে আমি জানি না।
চার্লি

0

প্রথমে - আপনি সাধারণ অগ্রাধিকারের চেয়ে বেশি ব্যবহার করতে পারেন (উদাহরণস্বরূপ উচ্চ)

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

এবং আপনি আরও স্মৃতি যুক্ত করার চেষ্টা করতে পারেন / প্রসেস গতি বাড়ানোর জন্য বেশ কয়েকটি হার্ড ডিস্কে র‌্যামড্রাইভ / স্প্লিট কাজ ব্যবহার করতে পারেন


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

0

এই প্রশ্নটি কিছুক্ষণ আগে, এবং উইন্ডোজ সার্ভারের জন্য 2008R2। আমার একই প্রশ্ন ছিল, তবে উইন্ডোজ 10 এর জন্য, উইন্ডোজ 10-এ (1703 এবং 1809 তে যাচাই করা হয়েছে), কেবলমাত্র আমদানিকৃত এক্সএমএল এর মাধ্যমে 4 এ "অগ্রাধিকার" সেট করা আপনাকে একই বেস অগ্রাধিকার, গতিশীল অগ্রাধিকার, I / O অগ্রাধিকার দিতে যথেষ্ট , এবং একটি ইন্টারেক্টিভ শুরু প্রক্রিয়া হিসাবে স্মৃতি অগ্রাধিকার।


0

অগ্রাধিকার সেট করার জন্য এখানে একটি পাওয়ারশেল স্নিপেট রয়েছে (একটি রিমোট পাওয়ারশেল অধিবেশনে কাজ করে!):

$taskName = "MyTask" ;`
$currentTask = Get-ScheduledTask -TaskName $taskName ;`
$settings = New-ScheduledTaskSettingsSet ;`
$settings.Priority = 4 ;`
Set-ScheduledTask -TaskName $taskName -Trigger $currentTask.Triggers -Action $currentTask.Actions -Settings $settings -User "NT AUTHORITY\SYSTEM"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.