জাভাতে স্ট্যাকওভারফ্লো ইরির ধরা কি কখনও * ঠিক আছে?


27

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

দ্বিতীয় দিকটি হ'ল কোনও জেভিএম মারাত্মক ত্রুটি (উদাহরণস্বরূপ স্ট্যাকওভারফ্লো এরর) ধরা পড়লে আক্কা তার পুরো অভিনেতা সিস্টেমটি বন্ধ করতে কনফিগার করা হয়েছে।

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

দ্রুত সমাধান হিসাবে আমাকে StackOverflowErrorনিক্ষিপ্ত হচ্ছে ধরা পড়তে হয়েছিল , যাতে অভিনেতা সিস্টেমের থ্রেড পুলটি ছিন্ন না হয়। এটি আমাকে ভাবতে পরিচালিত করে যে সম্ভবত কখনও কখনও বিশেষত এরকম প্রসঙ্গে এই জাতীয় ত্রুটিগুলি ধরা ঠিক আছে? যখন কোনও থ্রেড পুল প্রক্রিয়াজাতকরণ কাজ করে? একজনের বিপরীতে OutOfMemoryErrorআমি কল্পনাও করতে পারি না কীভাবে কোনও StackOverflowErrorকোনও অসঙ্গতিপূর্ণ অবস্থায় কোনও অ্যাপ্লিকেশন ছেড়ে যেতে পারে। স্ট্যাকটি এই জাতীয় ত্রুটির পরে সাফ হয়ে যায়, তাই সাধারণভাবে গণনা চলতে পারে। তবে সম্ভবত আমি গুরুত্বপূর্ণ কিছু মিস করছি।

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

কেন জেভিএম প্রক্রিয়াটি পরিবর্তনের পরিবর্তে পুনরায় আরম্ভ করা, সেই কাজটিকে StackOverflowErrorব্যর্থ হিসাবে চিহ্নিত করা এবং আমার ব্যবসা চালিয়ে যাওয়া ভাল হবে?

এসওইগুলি কখনই ধরার কোনও জোরালো কারণ নেই? "সেরা অনুশীলন" ব্যতীত, এটি একটি অস্পষ্ট শব্দ যা আমাকে কিছুই বলে না।


1
আর একটি বিকল্প হ'ল জেভিএমের স্ট্যাক স্পেস বাড়িয়ে দেওয়া
রেচেট ফ্রিক

3
@ratchetfreak: StackOverflowExceptionগুলি সাধারণত পদ্ধতি কলগুলির অ-সমাপ্ত চেইনের কারণে হয় - স্ট্যাকের জায়গা বাড়ানো কোনও লাভের জন্য নতুন থ্রেডের মেমরির ব্যয়কে বাড়িয়ে তুলবে।
ঝোমিনাল

1
কমপক্ষে একটি SOE বৈধ ছিল কারণ ইনপুটটি খুব বড়। দুর্ভাগ্যক্রমে, এটি একটি পুনরাবৃত্তিমূলক বাস্তবায়ন (জাভার রিজেক্স ইমপ্লিট) দিয়ে পরিচালনা করা খুব ভাল ধারণা ছিল না। যাইহোক, গণনাটি সমাপ্তির গ্যারান্টিযুক্ত থাকা সত্ত্বেও, আপনি জানেন না যে নতুন স্ট্যাকের আকার অন্যান্য গণনাগুলির জন্য যথেষ্ট বড় কিনা।
আয়নু জি স্টান

2
এটি স্টায় স্থানান্তরিত করা উচিত নয় ... ওহ, অপেক্ষা করুন ... কিছু মনে করবেন না। :-)
blrfl

আপনার বগি লাইব্রেরি সম্পর্কিত। আপনার পিডিএফের নিজস্ব প্রক্রিয়াটিতে কারসাজি করা কার্যত স্থানান্তরিত করা উচিত যাতে আপনি ওএসকে এটি হত্যা করতে পারেন।
এসবেন স্কোভ পেডারসেন

উত্তর:


44

একটি সাধারণ নিয়ম হিসাবে, যদি এটি কখনই একেবারে গ্রহণযোগ্যতা না হয় এবং সে সম্পর্কে একমত হয়, ভাষা প্রয়োগকারীরা এটির অনুমতি দিত না। সর্বসম্মতভাবে ক্লিয়ার-কাট ম্যাক্সিম্স প্রায় নেই। (ভাগ্যক্রমে, কারণ এটাই আমাদের কর্মসূচিতে কর্মী রাখে!)

এটি দেখতে অনেকটা মনে হচ্ছে আপনি এমন একটি পরিস্থিতি খুঁজে পেয়েছেন যেখানে এই ত্রুটিটি ধরা আপনার পক্ষে সেরা বিকল্প: এটি আপনার অ্যাপ্লিকেশনটিকে কাজ করতে দেয়, অন্য সমস্ত বিকল্পগুলি না করে এবং শেষ পর্যন্ত এটিই গণনা করে। সমস্ত "সেরা অনুশীলন" হ'ল অনেক ক্ষেত্রে দীর্ঘ অভিজ্ঞতার সংক্ষিপ্তসার যা সাধারণত সময় বাঁচানোর জন্য নির্দিষ্ট ক্ষেত্রে বিশদ বিশ্লেষণের জায়গায় ব্যবহার করা যেতে পারে; আপনার ক্ষেত্রে, আপনি ইতিমধ্যে নির্দিষ্ট বিশ্লেষণ করেছেন এবং একটি আলাদা ফলাফল পেয়েছেন। অভিনন্দন, আপনি স্বাধীন চিন্তা করতে সক্ষম!

(এটি বলেছে, অবশ্যই এমন পরিস্থিতি রয়েছে যেখানে স্ট্যাকের ওভারফ্লো কোনও অ্যাপ্লিকেশনটিকে মেমোরি ক্লান্তির মতোই বেমানান ছেড়ে দেয় Just কল্পনা করুন যে কোনও বস্তু নির্মিত এবং তার পরে নেস্টেড অভ্যন্তরীণ পদ্ধতির কলগুলির সাহায্যে আরম্ভ করা হয়েছে - যদি তাদের মধ্যে কেউ নিক্ষেপ করে তবে অবজেক্টটি খুব সম্ভবত এমন একটি রাজ্যে থাকতে পারে যা সম্ভব হবার কথা নয়, ঠিক যেমন কোনও বরাদ্দ ব্যর্থ হয়েছিল had তবে এর অর্থ এই নয় যে আপনার সমাধানটি এখনও সেরাটি হতে পারে না))


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

14
+1: সর্বোত্তম অনুশীলনগুলি সর্বদা কেন এবং কী প্রসঙ্গে তারা "সেরা" তা ব্যাখ্যা সহকারে আসা উচিত , যাতে তারা আপনার নির্দিষ্ট ক্ষেত্রে প্রযোজ্য কিনা তা আপনি বিচার করতে পারেন।
মাইকেল বার্গওয়ার্ড

situations hereহওয়া উচিত situations where
পরিবেশন করুন

2

আমি জানি না যে এখানে কোন জেভিএম-নির্দিষ্ট ঝুঁকি রয়েছে কি না, তবে সামগ্রিকভাবে এটি বেশ বুদ্ধিমান বলে মনে হয়।

উদাহরণস্বরূপ এখানে নিষ্প্রভ কুইকোর্টের মতো পুনরাবৃত্ত অ্যালগরিদম রয়েছে, যেগুলির log(n)একটি সাধারণ ক্ষেত্রে গভীরতা থাকে তবে সবচেয়ে খারাপ ক্ষেত্রে তারা গভীরতার দিকে অবনমিত হয় nযা স্ট্যাকটি ফুটিয়ে তুলতে পারে।

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

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