Jaa


Suuri Skype for Business muistin mysteeri

Tämän artikkelin on kirjoittanut Kenn Guilstorf, Skype for Business Escalation Engineer.

Eskalointiinsinöörinä avustan asiakkaita joidenkin "persnickety"-Skype for Business ongelmien kanssa. Viime aikoina olen saanut useita tapauksia, jotka ovat "suorituskykyyn perustuvia" – pohjimmiltaan valitukset siitä, että Skype for Business on hidas tai hidas, eivät salli sovellusten jakamista tai käyttävät yksinkertaisesti liikaa muistia. Monta kertaa näitä tapauksia koskeva tutkimus osoittaa, että käyttäjä on antanut Skype for Business toimia viikkoja, ja ajan myötä muisti on hiipunut, kunnes se vaikuttaa suorituskykyyn. Olen jopa huomannut sen itse, kun annan Skypen toimia pitkään. Mitä Skype tekee ja miksi se sisältää niin paljon muistia? (Tässä on pieni vihje: Tämä on normaalia ja suunniteltua. Mikään ei ole vialla – kaikki alkuperäiset ohjelmat törmäävät tähän.)

Kuinka paljon muistia se voi pureskella?

Ensimmäinen vaihe ongelman korjaamiseksi on ongelman ymmärtäminen, ja ensimmäinen vaihe ongelman ymmärtämiseksi on ongelman määrittäminen. Tämä ei ole niin helppoa kuin miltä kuulostaa.

Kun Skype for Business (SfB) käynnistyy ensimmäisen kerran, muistin käyttö on verrattain pientä (jos voit laskea 100 Mt pieneksi). Voimme nähdä, että tämä tapahtuu missä tahansa työkalussa, kuten Tehtävienhallinnassa:

Näyttökuva, jossa näkyy Lync-sovelluksen tiedot Tehtävienhallinta-ikkunassa ja muistiarvot 83 428 000.

Kuva 1: Älä hämää: Lync.exe on SfB-prosessin nimi (32-bittinen versio)

Ajan mittaan prosessin käyttämän muistin määrä kasvaa. Skypen käyttö ja käyttö määräytyvät sen mukaan, kuinka suuri se kasvaa. Esimerkiksi tässä on sama asiakas noin 24 tunnin kuluttua:

Näyttökuva, jossa näkyy Lync-sovelluksen tiedot Tehtävienhallinta-ikkunassa muistin kasvaessa 115 196 000:een.

Kuva 2: Sama SfB 24 tuntia myöhemmin

Skype on siis kuluttanut noin 32 Mt 24 tunnissa. Se ei ole paljon, vai mitä? Se ei todellakaan ole – ennen kuin selitän, että Skype vain istui käyttämättömänä kaikki nämä 24 tuntia. Aloitin Skype for Business tietokoneella, lukitsin sen ja odotin 24 tuntia ennen sen lukituksen avaamista. Käytössä maksu olisi ollut paljon suurempi – etenkin jos olisin liittynyt kokouksiin, käyttänyt sovellusten jakamista tai pöytätietokoneiden jakamista näissä kokouksissa, käyttänyt pikaviesteihin ja niin edelleen. Olen nähnyt tapauksia, joissa Skype for Business muistin käyttö kasvoi yhdessä päivässä 300–500 Mt:iin. Käyttö voi hidastua vähintään yhden viikon käytön jälkeen – etenkin paljon rajoitetummassa 32-bittisessä asiakasohjelmassa.

Näytä muisti

On monia työkaluja, jotka voivat profiloida muistia. Yksi suosituimmista – vähintään Microsoftilla – on SysInternals-työkalu VMMap, joka on saatavilla osoitteessa VMMap v3.26. Sen avulla voidaan tarkastella prosessin muistia ja katsoa, voimmeko profiloida Skype for Business muistia.

Kun olet ladannut VMMapin, suorita se. Kun se käynnistyy, se avaa prosessiluettelon, jotta voit valita prosessin, jota haluat tarkastella. Valitsen lync.exe ja valitsen OK.

Näyttökuva, jossa näkyy V M-kartta alussa Lync valittuna.

Kuva 3: VMMap alussa

Seuraavaksi näet grafiikan, joka esittää monivärisesti valitsemasi tiedoston nykyisen muistiprofiilin – tässä tapauksessa Lync.exe.

Näyttökuva, jossa näkyy muistiprofiilin monivärinen esitys.

Kuva 4: Näennäiskartan aloittaminen äskettäin alkaneille Lync.exe

Tässä on paljon tietoa, ja sen kuvaaminen täyttäisi yhden tai useamman blogimerkinnän. Jos olet kiinnostunut, käytettävissäsi on useita hienoja kirjoja ja online-artikkeleita, joiden avulla voit selittää sen. (Henkilökohtaisesti suosittelen Jeffrey Richterin "Advanced Windowsia", joka on tällä hetkellä tulostuksen lopussa, mutta joka selittää silti erinomaisesti muistin toimintaa. Löydät käytetyt kopiot siitä suosikkikirjakaupastasi.)

Kuten näet, Tehtävienhallinnassa näkyvä muisti ei ole linjassa minkään VMMapin luokan kanssa. Tehtävienhallinta on yleisempi esitys; se on tarkka, se ei vain laske kaikkea. VMMap on paljon kattavampi.

Tässä on Skype-esiintymämme 24 tunnin odotusajan jälkeen:

Näyttökuva, jossa näkyy Skypen V M -kartta 24 tunnin kuluttua.

Kuva 5: VMMap Skypelle 24 tunnin kuluttua

Missä muisti on?

Jos vertailet kutakin yksittäistä luokkaa, mikään ei oikeastaan vastaa toisiaan. Muistia kuluttavaa on vaikea löytää, koska muistin luokat vaihtelevat, kun objekteja ja muistipyyntöjä tehdään ja vapautetaan ja muisti varataan ja sidotaan eri objektien tallentamiseen. "Tietämyksen ydin" (joka tapauksessa tätä blogia varten) on "Ilmainen" -luokka. Tässä esimerkissä "vapaa" muisti on kaikki lync-suoritettavalle ohjelmalle varattu tila. Mutta vain tietyntyyppinen "vahvistettu" muisti näytetään Tehtävienhallinnassa. Varattua muistia ei lasketa, koska se ei ole käytössä.

Missä muisti on? Sitä on vaikea paikantaa, koska muistia ei menetetä. Toisin kuin yleisesti luullaan, pöytätietokoneiden muistivalmistajat eivät tue Skype-tiimiä. Asiakkaiden saamiseksi päivittämään järjestelmiä tai muistia ei ole olemassa pahoja juonia. Tässä ei ole kyse edes suunnitellusta vanhenemisesta. Totuutta on vaikeampi selittää.

Palataanpa hieman taaksepäin, jotta asiat ovat selvempiä. Kun käynnistät Skype for Business asiakasohjelman ensimmäisen kerran, sillä on suhteellisen pieni muistijalanjälki – yleensä noin 100 Mt, riippuen siitä, kuinka monta yhteyttä se seuraa sinua ja muita yleiskustannuksia varten (näet tämän selvästi yllä olevista tiedoista). Muutaman päivän kuluttua huomaat, että tämä jalanjälki kasvaa useita satoja tuhansia tavuja useisiin megatavuihin. Joissakin tilanteissa tämä voi olla ongelma , mutta se ei välttämättä ole ongelma itse Skype for Business. Se on pikemminkin Windows-ohjelmointiparametrin vaikutus ja se, miten se käsittelee muistia suoraan.

Windows-ohjelmointi mitä?

Annan vain yksinkertaisen kuvan Windowsin muistista. Windows-muistia käsitellään kalliilla (tietokonejaksoilla ja resursseilla) toimintosaroilla, joita kutsutaan kohdistuksiksi ja varausten purkamiseksi. Kun ohjelma tarvitsee muistia, se pyytää Windowsia varaamaan sen. Kun muisti on lopussa, ohjelma pyytää Windowsia peruuttamaan sen varaamisen. Sisäisesti Windows käy läpi useita prosesseja muistipyyntöjen hallintaan.

Kun pyyntö tehdään, Windows tarkistaa muistin, jonka se on jo sitoutunut prosessiin, mutta jota prosessi ei käytä. Windows etsii, onko muistilohko tarpeeksi suuri käytettäväksi. Jos on, järjestelmä käyttää sitä ja jatkaa iloiseen suuntaansa. Jos näin ei ole, se tarkistaa varatun muistin. Jos varattua muistia on tarpeeksi paljon, se sitoo sen (käyttöjärjestelmän määrittämiä lohkoja, joita kutsutaan "sivuiksi"), ja tallentaa muuttujan siihen. Muisti on nyt varattu, ja olemme juuri kasvattaneet suoritettavan tiedoston muistijalanjälkeä.

Mitä tapahtuu, jos varattu muisti ei riitä pyynnön käsittelemiseen? Käyttöjärjestelmä yrittää varata enemmän muistia , jos se on mahdollista. Tässä kohtaa huomioidaan 32-bittisen arkkitehtuurin ja 64-bittisen arkkitehtuurin ero. 32-bittinen prosessi voi käyttää enintään 4 Gigatavua muistia. Tämä johtuu siitä, että 4 Gt on suurin sallittu määrä, jonka 32-bittinen rekisteri voi osoittaa. (Bitti voi sisältää vain luvun 1 tai 0 – binaariarvon. Siksi 32 bittiä tarkoittaa, että 232 on suurin sallittu osoite). 32-bittisen arkkitehtuurin ansiosta vain noin 2 Gt muistia on määritetty itse prosessille, loput käyttöjärjestelmä käyttää yleisten DLL-objektien yhdistämiseen, yleisten ydintilan objektien hoitamiseen ja niin edelleen. 64-bittisessä järjestelmässä 64-bittiset pitkät rekisterit pystyvät käsittelemään 264: n, mikä osoittautuu noin 18 exabytes. Windows rajoittaa kuitenkin keinotekoisesti muistin määrää, joka on saatavilla varattavaksi 2 teratavun ja 4 teratavun (TT) välillä Windows-versiosta riippuen.

Kun muisti on varattu, se sidotaan ja käytetään sitten kuten ennenkin. Varausten poistaminen on pitkälti päinvastainen - lukuun ottamatta yhtä tai kahta pientä mutta tärkeää yksityiskohtaa.

Windows ei ensinnäkään "tyhjennä" muistia, ellei sitä pyydetä. Kun muistin varaaminen poistetaan, windowsin muistikartassa se merkitään vapaaksi . Mitä tahansa se pitikin, se on edelleen siellä ja pysyy siellä, kunnes se korvataan toisella määrärahalla. Seuraavaksi Windows harvoin poistaa muistin vahvistusta, ellei sitä pyydetä. Kuten aiemmin sanoin, muistitoiminnot ovat melko resurssikohtaisia. Joten jos ohjelma tarvitsi aiemmin varattua muistia, Windows olettaa, että se saattaa tarvita muistia uudelleen ja viivyttaa muistin vahvistamisen poistamista, kunnes sen ehdottomasti on välttämätöntä. Lopuksi Windows ei koskaan "yhdistä" muistia. Tämä tarkoittaa sitä, että Windowsin vapauttamia muistilohkoja ei koskaan "koosteta" ja vapaan muistin lohkoja ei koskaan "siirretä yhteen" suuremman vapaan muistin lohkojen tekemiseksi. (Kaikki nämä funktiot niputetaan yhteen luokkaan, jota kutsutaan "roskien keräämiseksi". .NET Framework kuuluisasti on joitakin roskankeräystoimintoja. Skype for Business on kuitenkin "alkuperäinen" tai non-.NET sovellus.)

Skype for Business käsittelee joka sekunti useita objekteja, joiden koko on vaihtelevan suuri. Sen on tehtävä tämä ollakseen upea työkalu, jonka haluamme sen olevan. Pyydämme sitä hallinnoimaan kontakteja, hallitsemaan kalentereita (kokouksia), pikaviestiä ystäviemme, sukulaistemme ja työtovereidemme kanssa ja jopa puhumaan heille käyttämällä sekä ääntä että videota, jakamalla työpöytiä tai ikkunoita ja niin edelleen. Esimerkiksi robert Heinlein: "Ilmaista lounasta ei ole."

Näin monien erikokoisten ja usein muuttuvien objektien hallinta luo poikkeuksen kokoisten muistilohkojen kohdistuksia ja varausten poistoja. Ajan mittaan tämä aiheuttaa muistin pirstoutumista – toisinaan vakavaa – mikä kasvattaa Skype for Business muistijalanjälkeä.

Esimerkki voisi havainnollistaa tätä seikkaa paremmin. Oletetaan, että Skype (tai mikä tahansa alkuperäinen ohjelma) varaa 64 objektia, numeroitu 1-64, jotka ovat 4 Kt kunkin koossa:

Näyttökuva, jossa näkyvät Skype 64 -objektit.

Kuva 6: 64 objektia, joista jokainen käyttää neljää kilotavua muistia

Tämä aiheuttaa 256 kilotavua muistin varaamista ja sitoutumista. Oletetaan nyt, että ohjelma ei vaadi parillisilla numeroilla olevia objekteja, joten se vapauttaa ne:

Näyttökuva, jossa näkyvät kaikki vapautetut parilliset objektit.

Kuva 7: Kaikkien parillisten objektien vapauttaminen vapauttaa 128 kt muistia!

Jos tarkastelet kokonaismuistin kokonaiskuvaa (käyttämällä näennäiskonekartta tai vastaavaa työkalua), huomaat, että yhdellä vahvistetuista sarakkeista (todennäköisesti heap-osassa , mutta se riippuu siitä, miten ohjelma pyysi muistia) on 128 kt vähemmän ja Vapaa-osa on kasvanut 128 kilotavua. Tehtävienhallinnassa ohjelma omistaa nyt vain 128 kt muistia.

Oletetaan seuraavaksi, että ohjelmassamme on yksittäinen 8 kilotavua objekti, joka sen on talletettava. Tämän pitäisi olla yksinkertaista. Siinähän on ilmainen 128 kilotavua. Kun yrität tallentaa tämän kahdeksan kilotavuisen objektin, tämä luo kuitenkin uuden muistivarauksen sen sijaan, että muisti tallentuisi 128 kilotavuun tyhjään tilaan. Tämä johtuu siitä, että jos tarkastelet muistia, näet, että se on edelleen segmentoitu 4 kilotavuun lohkoihin! Windowsin muistilohko ei riitä 8 kilotavuisen objektin säilyttämiseen, joten sen on varattava ja talletettava enemmän muistia ohjelmaan.

Tämä on melko kontrasoitu esimerkki, mutta se havainnollistaa Skypen muistinhallinnan vaikeuksia. Skype hallitsee suurta määrää objekteja, joiden kokoa ei ole helppo määrittää. Kaikki nämä objektit on pidennys vaihtelevasti. Tämä tarkoittaa sitä, että kun objektit tallennetaan ja vapautetaan – erityisesti pitkän ajan kuluessa, kuten päivinä tai viikkoina – muistin pirstoutuminen voi muuttua vakavaksi, ja koska Windowsin on varata enemmän muistia uusien objektien tallentamiseen, muistin käyttö kasvaa liian paljon.

Kun tämä aiheuttaa ongelmia 32-bittisessä asiakasohjelmassa, suosittelemme usein siirtymistä 64-bittiseen asiakkaaseen, koska muisti on siellä paljon vähemmän rajoitettua 64-bittisen ja 32-bittisen arkkitehtuurin ansiosta. Muun muassa muistin liiallinen kasvu voi kuitenkin aiheuttaa hitautta jopa 64-bittisessä asiakasohjelmassa. Muita huomioon otettavia seikkoja ovat yleinen järjestelmämuisti, levyn nopeudet (koska ohjelman muistia tuetaan yleensä Windowsin sivutustiedoston näennäismuistilla), se, kuinka monta muuta sovellusta on avoinna ja niin edelleen. Molemmissa tapauksissa, kun Skype for Business muistin jalanjälki kasvaa ajan myötä, sitä huonommin se tulee suoriutumaan. 32-bittisessä asiakastapauksessa tämä voi aiheuttaa sen, että Skypen vaatimien suurempien objektien, kuten sovelluksen jakamisen sisäisen puskurin, tila loppuu ja se aiheuttaa virheitä.

Muisti on vain yksi ajan mittaan kulutettava resurssi, mutta se on ilmeisin. Käytön hallinta voi kasvaa, säikeet lisääntyvät ajan myötä, sivutetun varannon muisti kasvaa ja niin edelleen. Jokainen näistä nousuista voi vaikuttaa prosessiin ja joissakin tapauksissa koko käyttöjärjestelmään. Tämä on yksi lukemattomista syistä, miksi suosittelemme – jopa 64-bittisen asiakkaan kohdalla – että käyttäjät lopettavat Skypen ja käynnistävät sen uudelleen päivittäin (tai vähintään viikoittain) parhaana käytäntönä.

Mitä teen asialle ja voinko pakottaa Skypen käynnistymään uudelleen?

Skypen uudelleenkäynnistyksen voi pakottaa monella eri tavalla, mutta yksittäistä ja parasta tapaa ei ole. Yksi tapa on tietenkin käyttäjien koulutus. Käyttäjät ovat useimmissa tapauksissa työpöytäkäytön sovittelijoita, joten on pragmaattista opettaa heitä kirjautumaan ulos ja sulkemaan Skype, kun he lähtevät päiväksi. Tämä voidaan tehdä myös pakollisena vaiheena kirjoittamalla mukautettu komentosarja tai suoritettava tiedosto ja suorittamalla jompikumpi tehtävän ajoitustehtävänä. Tämä lähestymistapa on hieman kinkkua nyrkissä, ja se voi saada Skypen pyöräilemään silloinkin, kun se on "käytössä" (vaikka tätä voidaan lieventää jonkin verran Tehtävien ajoitus -ehdoilla). Tarjolla on myös kolmannen osapuolen mahdollisuuksia pöytätietokoneiden ja tietokoneiden hallintaan, mahdollisiin BIOS-vaihtoehtoihin jne.

Tärkeintä on, että Skype for Business on parasta pyöräillä päivittäin – tai vähintään viikoittain. Jos voit kouluttaa käyttäjiäsi kierrättämään Skype for Business säännöllisesti – tai ainakin silloin, kun asiat ovat outoja – sinulla on todennäköisesti paljon vähemmän tukipalvelupuheluita ja paljon onnellisempia käyttäjiä.