ისევ ვრონგ. ძია.
მე მქონდა პრაქტიკაში შემთხვევა. როცა ტომკატი იბრიდებოდა OOM killer-ით.
ზუსტად მაგ cgroup-ებშია, პრობლემა.
ისეთი ტექნოლოგიები როგორიც cgroup-ი არის არ იცის JVM-მა და კიდევ ბევრმა სოფთმა. ამიტომ მაგრად ახატია შენი ლიმიტები სიგრუპები limits.conf-ები და ა.შ საერთოდ არ იცის რა არის და აბუჩად იგდებს მაგ ლიმიტებს.
dockers-იც და kubernetes-იც ორივე იყენებს cgroup-ებს კერნელის დონეზე და ამით მართავს ლიმიტებს.
თუ ვიდეოს ყურება არ გინდა. აგერ მოკლე შინაარსი.
https://developers.redhat.com/blog/2017/03/...-inside-docker/https://www.google.com/search?q=kubernetes+...chrome&ie=UTF-8აი ეს კი ნაღდად არ არის ტყუილად ლაპარაკი. ორივე შემთხვევა მქონდა პრაქტიკაში. პირველი ჩემი ბრალი იყო jboss-ი რომ იბრიდებოდა. მაშინ ძაან ნუბი ვიყავი.
ჰიპერსონიკს დატაბეისი მქონდა, რომელიც გამოიყენება მხოლოდ ტესტინგის და დეველოპმენტისთვის
JBoss utilizes the Hypersonic database as its default database. While this is good for development and prototyping, you or your company will probably require another database to be used for production. This chapter covers configuring JBoss AS to use alternative databases. We cover the procedures for all officially supported databases on the JBoss Application Server. They include: MySQL 5.0, PostgreSQL 8.1, Oracle 9i and 10g R2, DB2 7.2 and 8, Sybase ASE 12.5, as well as MS SQL 2005.
ამის გამო ჩვენი დეველოპერების 1 წლის წინ დაწერერილ მემორი ლიქიან სოფტვერებს პოულობდა თავისით ეს ბაზა და წინა ვერსიებზე აროლბექებდა სოფტებს. თავისით ოღონდ. OOM კილლერი ბრიდავდა სერვერს. საკმაოდ მნიშვნელოვანს და მოკლედ დიდი პრობლემა იყო. დეველოპერებს ვაბრალებდი თავიდან. მემორი ლიქიან სოფტებს წერთ მეთქი. ლოგებში ეგრე ჩანდა. მაგრამ ის არავინ ვიცოდით რომ ჰიპერსონიკი იმახსოვრებდა ყოველ დიფლოიმენტზე თავის დატაბეიზში ყველა ვერსიას პროგრამისას და თავისით მერე რამე თუ არ მოეწონებოდა აროლბექებდა. ლოგებში ვიპოვე ის კლასი სადაც მემორი ლიქი იყო და რო ვანახე დეველოპერს ეს კოდი აგერ ამ კლასში გაქვს შეცდომა მეთქი ვახარე ამაყად და ეს იწვევს ლიქს მეთქი. 2 წლის წინ დავწერე ეგ კოდი და მერე ეგრევე წავშალეთ და გავასწორეთო და შენ საიდან გააძრეო გაუკვირდა. იმის მერე 1000-სხვა ვერსია დავადეპლოიმენტეთ და ბოლო 1 კვირის ეგ აპლიკაცია ჩემი ხელით ჩაგდებული ახალი. მოკლედ ბოლოს მივაგენი როგორღაც რო ჰიპერსონიკის ბრალი იყო და მას მოქონდა ეს 2 წლის წინანდელი დაწერილი კოდი შენახული.
მეორე შემთხვევა მქონდა მე თვითონ დავწერე ჯანგოში სოფტი და მემორი ლიქი ქონდა. ძალიან ადვილია სხვათაშორის ეგეთი სოფტის დაწერა და არსაც არც ლოგებში არსად შეცდომას არ აგდებს თითქოს სანამ დევ გარემოში კონსოლს არ გახსნი და არ შეხევა ვერ მიხვდები ლიქი რომ გაქვს.
რეაქტშიც დავწერე ერთხელ და იმასაც ქონდა ლიქი. მოკლედ თუ გამოცდილება არ გაქვს. დიდი ალბათობით უეჭველი გაგეპარება ლიქი სადმე. და JAVA-ს JVM -ის შემტხვევაშიც და სხვა სოფტებშიც რომელმაც არ იცის limit.conf და cgroup გამოიწვევს ქაოსს. განსაკუთრებით თუ პროდაქშენში გაქვს სერვერი აი კატასტროფაა.
ერთი როცა შენ ვორქსთეიშენზე გაქვს ეგ პრობლემა და მეორე როცა სერვერზე და თავზე გადგას 10 დეველოპერი უფროსობა და კიდევ ფორმიანი და ავტომატიანი კაცები
და ელოდებიან შენგან პასუხს. რა ხდება? რატო არ მუშაობს
ახლავე ელოდებიან პასუხს თანაც. შენ თითს იასნა დეველოპერებისკენ იშვერ და პირიქით
რასაც ახლა ვნანობ და ძალიან არასწორია თითების გაშვერა. მაგარი ბანძობაა. არაპროფესიონალიზმია და ისედაც ცუდი საქციელი
მითუმეტეს თუ შენი ბრალია :დ
cubernet-შიც და დოკერსჩის და თუ გინდა პირდაპირ cgroup limit.cof-ში გაუწერე ვთქვათ. პროცესს 100MB ხო?
JVM -ი რას იზამს იცი. რომ გაუშვება ამ cgroup-ში ნახავს სერვერს რამდენი აქვს მეხსიერება მთლიანად. ვთქვათ 16GB ხოდა მაგის 20% მიანიჭებს JVM-ს რაც 100MB-ზე მეტი გამოდის და შარია.
ამიტომ ტყუილად არ ვწერ
შენ რაც ქენი კიდევ ტერმინალებზე და ა.შ ძალიან მაგარია. ერთი პერიოდი მართლა კონსოლში ვიჯექი. სულ.
elinks მქონდა. frambuffer-ები. mutt ვიყენებდი. დაჟე ვიდეოს გაშვება შემეძლო კონსოლში და ა.შ და ძალიან კარგია რომ ეგრე ხარ მართლა. სგ. kudos to you.
მოკლედ სვაპი თუ 4 გბ-ზე ნაკლები გაქვს. ჩვეულებრივ ლეპტოპზეც კი მიკიდებდა სისტემას. kswapd პროცესი სახეს აგლიჯავდა პროცესორს. სერვერზე კიდევ შანსი არაა რამდენიც არ უნდა მქონდეს მეხსიერება. სვაპს მაინც მივცემ.
განსაკუთრებით თუ cgroup-ებს. k8s და dockers ვიყენებ ან გინდაც KVM-ს
იმის თქმა მინდა რომ ოპტიმისტურად არ უნდა იყო. იმიტომ რომ მემორი ლიქების და fork bomb-ები გაგეჩითება ზუსტად იმ დროს რო არ ელოდები და თანაც ისე რომ ვერც მიხვდები. რაც ყველაზე ცუდია დებაგსაც ვერ გააკეთებ თავის დროზე. თუ რაიმე კრიტიკული არაა მაშინ სვაპი კიარადა მეხსიერების მაგივრად მწნილი ჩათხარე თუ გინდა
მაგრამ თუ სერვერია ან რამე კრიტიკული არ უნდა ენდო არაფერს მანდ და დისი სიფრთხილით და პანიკით უნდა მოეკიდო )
და სულ რომ 1ტერაბაიტი გქონდეს RAM სვაპი მაინც მიეცი
იმიტომ რომ ლიქი ზოგჯერ ძალიან სწრაფად გივსებს რამს ) თუნდაც ტერაბაიტს
* * *
აი სერვერებთან თუ მუშაობ გამოგდგება ძალიან.
* * *
სხვათაშორის. შენ რომ 300MB აძლევ limit-ით ამდენივე swap-ს ავტომატურად გამოყოფს თავისით. ასერომ სვაპი მაინც გექნება))
This post has been edited by NinjaRacer on 21 Feb 2019, 16:46