Как да повиша приоритета на IIS процесите (както за w3wp, така и за iis apppool)?

Има приложение ASP.NET с набор от уеб услуги и има приложение WinForms, което извиква тези уеб услуги.

W3wp.exe (който обработва asmx извиквания) изпълнява специални процеси, които вършат наистина „трудни“ задачи (като компресиране, парсване на xml и т.н.). Дълга е историята защо трябва да се прави в отделни процеси и защо не стартираме този код вътре в w3wp.exe - това тук няма значение. Сигурно е така.

Ако няколко заявки дойдат едновременно от много потребители, може да има 30-40 такива процеса и те консумират CPU. Те го консумират толкова много, че почти не остават ресурси на процесора за самия IIS.

И така, проблемът е следният: когато следните HTTP заявки идват към този IIS, IIS не може да се справи с тях: не може дори да ги предаде на w3wp.exe, защото сървърът е „бомбардиран“. И като резултат, в пиково време 30 потребители са изпълнили своите заявки, а 31-вият потребител получава WebException в WinForms клиента „времето за изчакване е изтекло“.

Намерих много статии в интернет, които обясняват как да настройвам IIS, но никой не взема предвид факта, че ДРУГИ процеси и/или приложения могат да работят на същата машина. И никой не казва какво да направя, за да направя IIS с по-висок приоритет.

И така, въпросът е следният: има ли начин да се "обясни" IIS, че трябва да стартира по подразбиране apppool (svchost.exe) и w3wp.exe с нейния приоритет?


person Ihor B.    schedule 15.11.2012    source източник
comment
Какво ще кажете за стартиране на специални процеси с по-нисък приоритет?   -  person Andrew Morton    schedule 15.11.2012
comment
Звучи като време за добавяне на още хардуер.   -  person AaronS    schedule 16.11.2012
comment
@AaronS звучи повече като лош дизайн на приложението. Ако сървърът бъде наводнен, като прави 30 неща наведнъж, тогава той трябва да разпредели задачите във времето. Можете лесно да разработите ASP.NET приложения, които изпълняват задачи асинхронно и докладват обратно на потребителя, когато фоновите задачи са изпълнени.   -  person Dai    schedule 16.11.2012
comment
защо хората си правят заключения БЕЗ да познават домейна?   -  person Ihor B.    schedule 16.11.2012
comment
дълго е да се обяснява защо кодът, който върши някаква работа, се изпълнява в тези отделни процеси. това е свързано с COM (един COM обект на Microsoft), който не освобождава памет и който не работи добре в случай, че 2 екземпляра на този обект работят в ЕДИН процес. Това е причината, поради която кодът не работи в w3wp.exe и се поставя в отделен процес. Но така или иначе, ако този код работеше в w3wp или не в w3wp - щеше да бомбардира много силно сървъра - както процесора, така и твърдия диск. Така че въпросът е по-общ: какво да правим с IIS в случай, че нещо бомбардира сървъра?   -  person Ihor B.    schedule 16.11.2012
comment
Ако увеличите приоритета на IIS, вероятно ще се наложи да увеличите приоритета на много други процеси на сървъра. Алтернативата е да се намали приоритетът на ресурсоемкия процес, така че IIS (и останалата част от системата) да може да функционира нормално. Можете ли да поставите ресурсоемкия процес на друг компютър или, както намекна Дай, да поставите задачите в опашка и да не обработвате толкова много наведнъж, че компютърът да затъне?   -  person Andrew Morton    schedule 16.11.2012
comment
ако намалим приоритета на тези специални процеси, възниква друг проблем: когато w3wp.exe и този процес комуникират чрез отдалечено управление, отдалечените повиквания често прекъсват с изключение IPC каналът е умрял или нещо подобно. И аз не знам защо. Най-вероятно това се дължи на бъгове на Microsoft .NET при отдалечено изпълнение, каквото и да е. Но процесът трябва да е с нормален приоритет, за да се свържете успешно с него чрез отдалечено управление. Така че изходът е да увеличите приоритета на процеса на IIS ИЛИ да преработите цялото приложение, за да преместите тази специална работа на друг сървър.   -  person Ihor B.    schedule 20.11.2012
comment
Така че въпросът е как да се увеличи приоритетът на IIS все още остава   -  person Ihor B.    schedule 20.11.2012


Отговори (1)


Сблъсках се с този проблем в Windows Server 2008 r2. Имах услуга за Windows (която използваше паралелна обработка), която раздуваше процесора ми много и не оставяше нищо за IIS и SQL Server.

Затова зададох афинитет на процесора към услугата Windows да използва само определени процесори. Влизате в Диспечер на задачите->Процес с десния бутон -> Задаване на афинитет.

Това остави други процесори свободни да използват за SQL & IIS.

До известна степен това намали производителността на услугата Windows, която сега работеше с ограничен набор от процесори, но това нямаше толкова голямо значение.

person Abdul Rehman Sayed    schedule 27.12.2016