ধীর প্রথম কলটি এড়াতে কীভাবে জাভা ক্লাসগুলিকে উষ্ণ করা যায়?


13

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

বর্তমানে / লগইনে প্রথম কলটি 3..6 ঘন্টা লাগে এবং তারপরে অন্য সমস্ত রুটের জন্য ১ms০ এমএস এবং একই হয়।

আমি -XX:+TraceClassLoadingপ্রথম কলটিতে এটি ব্যবহার করে জানতে পেরেছিলাম , ক্লাসগুলি মেমরিতে লোড হয়েছিল এবং এটি পারফরম্যান্সের সমস্যার কারণে।

তবে আমি আরম্ভের সময় এবং প্রতিটি নতুন পরিষেবার জন্য সমস্ত ক্লাস লোড করার সহজ উপায় খুঁজে পাইনি, আমাকে একটি অ্যাপ্লিকেশন রুনারে একটি ওয়ার্ম আপ কল যুক্ত করতে হবে।

স্প্রিংবুট অ্যাপ্লিকেশনটির ক্লাসগুলি স্বয়ংক্রিয়ভাবে লোড করার বা এর সমস্ত রুট আপ আপ করার জন্য কারও কি সমাধান আছে?


আপনি আরও বিশদ যুক্ত করতে পারেন? আপনার অ্যাপ্লিকেশন কি কনট্রোলারগুলি ইনস্ট্যান্ট করছে? অথবা আপনি অন্য পরিষেবাগুলিতে কল করছেন? অন্যান্য পরিষেবাগুলিতে আপনি কীভাবে কল করছেন?
মেনিয়োস

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

কিছুটা পরোক্ষ পদ্ধতির: আপনার যদি শেষ পয়েন্টগুলির জন্য 100% ইউনিট পরীক্ষার কভারেজ থাকে তবে আপনি সেগুলি ব্যবহার করতে পারেন। আপনি এখনও শেষবিন্দু প্রতি কোড করতে হবে কিন্তু আপনি কিছু লাভ
Marged

1
আপনি যে প্রকল্পটি করছেন তার উপর নির্ভর করে আপনার পক্ষে আদর্শ নাও থাকতে পারে তবে আপনার অ্যাপ্লিকেশনটি লোড হওয়ার পরে আপনি অভ্যন্তরীণভাবে আপনার শেষ পয়েন্টগুলিতে কল করতে পারেন।
omoshiroiii

@omoshiroiii- এর সাথে কোনও ভুল নেই । আমরা এটা করি. উৎপাদন. কারণটি কিছু গতিশীল লাইব্রেরিগুলির সাথে সম্পর্কিত যা invokedynamicআমরা ব্যবহার করি এবং আমরা জানি যে রেজোলিউশনটি তাদের প্রথম কলটিতে ধীর গতিতে রয়েছে (আমাদের কাছে এই ধরণের কয়েক হাজার কল রয়েছে, যা এই প্রথম কলটি কয়েক সেকেন্ডে জমা হয়)।
ইউজিন

উত্তর:


1

জাভার ক্লাস লোডিং অলস। এর অর্থ কোনও শ্রেণি কেবল জেভিএম দ্বারা লোড হয় যখন এটি প্রয়োজন হয় এবং যদি এটির প্রয়োজন হয়।

আপনি যদি আগ্রহের সাথে ক্লাসগুলি লোড করতে বাধ্য করতে চান তবে কেবল তাদের উল্লেখ করতে হবে। এটি করার একটি উপায় হ'ল বয়সের সামগ্রীগুলি বা শ্রেণীর ফাইলগুলির মাধ্যমে শ্রেণীর নামগুলি পেতে পুনরাবৃত্তি করা এবং তারপরে তাদের কল করতে ব্যবহার করুন Class.forName(className)

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


এগুলির কেউই ওপির সমস্যার সমাধান করবে না। গ্রেডভিএম এবং লোডিং এখনও অলসJIT উপর অর্থহীন প্রথম সত্যিই আমন্ত্রণ।
ইউজিন

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

আমি জারে ক্লাসগুলি লোড করার কথা ভেবেছিলাম কিন্তু আমি এটি করার কোনও উপায় খুঁজে পাইনি, আপনি কি একটি উদাহরণ পাবেন?
ইব্রি

@ ইউজিন আপনি যদি আমার উত্তরটি পড়েন তবে আপনি দেখতে পাবেন আমি গ্রায়েলভিএম বা জেআইটি প্রান্তিকতা বলিনি বর্গ লোডিংয়ের অলসতায় পরিবর্তন আনবে। অলসতার বিষয়ে ওপির প্রশ্নের উত্তরটি হ'ল তার আগের অনুচ্ছেদ graph ক্লাস লোডিংয়ের বাইরে স্টার্টআপের সময় / পারফরম্যান্সটির আরও অনুকূলকরণের ক্ষেত্রে ওপিয়াকে কেবলমাত্র অতিরিক্ত টিপ দেওয়া হবে।

1
@Ybri সেখানে যে উত্তরের সঙ্গে অন্য কোন প্রশ্ন এখানে আছেন, যেমন stackoverflow.com/questions/2370867/...
andresp

0

আমার কাছে, আপনার কাছে কেবলমাত্র কার্যকর বিকল্পটি হ'ল জেইপি 310 , জেপি 341 এবং জেপি 350class data sharing জুড়ে , তবে এর জন্য সম্ভবত জাভা -13 প্রয়োজন। আমরা আমার কাজের জায়গায় এটি অভ্যন্তরীণভাবে পরীক্ষা করছি (বেশিরভাগ মজাদার জন্য, মিথ্যা বলার অপেক্ষা রাখে না) এবং ফলাফল এখনও পর্যন্ত ভাল দেখাচ্ছে।

অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে অন্য বিকল্পটি আপনার শেষ পয়েন্টগুলিতে কল করছে - যদি এটি কোনও বিকল্প হয়। আবার, এটি হল উদাহরণস্বরূপ আমাদের জন্য: আমরা কোড গরম করা শতবার দুয়েক ডামি ডেটার সাথে তাদের কল। তবে, একই সাথে, আমাদের পরিষেবা রয়েছে যেখানে এটি অসম্ভব - কারণ CDSএটিও অন্বেষণ ।


আপনার উত্পাদন ডেটাবেসে ডেটা সৃষ্টি এড়াতে আপনি কীভাবে প্রমাণীকরণ এবং পোস্টের শেষ বিন্দুগুলি পরিচালনা করবেন?
ইব্রি

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