P mint performancia (és mint PHP)

Néha úgy hozza a sors, hogy az embernek be kell piszkolnia a kezét. Apache-al, PHP-val, és mindennel ami ezzel jár.

Egy web szerver készítése általában egyszerű feladat.

apt install apache2
apt install php

A bonyodalmak általában ez után következnek, mivel ami ez után történik produkcióban az meglehetősen lassú, és erőforrás igényes. Mint régi új szerver tulajdonos meglepődve konstatáltam, hogy egy normális weboldal betöltése eltart 3 másodpercig, ami bár nem sok idő (főleg egy kazettás töltéshez képest a c64-en), de általában ezzel már nem vagyok túl elégedett.

Hogy ez ne így legyen ahhoz az alábbi dolgokat kell tenni:

Kezdjük az apache-al, ami alapesetben preforkol, de az lassú, főleg ha virtualizált környezetekről van szó, célszerűbb előre létrehozni kiszolgáló szálakat, és thread-eket. Ehhez mpm módot kell váltani. Itt lehet event-et is használni, de nekem a worker alapú megoldás optimálisabb, mivel egyszerűbb és nem számítok nagy egyidejű lekérdezésre:

a2dismod mpm_prefork
a2enmod mpm_worker

Ez előtt a php modult is ki kell kapcsolni. A worker alapú megoldással az alap php modul általában nem működik, mivel nem thread safe (Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP). De ez nem is akkora nagy probléma, mivel php terén is érdemes már a kezdetek kezdetén perspektívát váltani, és telepíteni a php-fpm-et:

apt install php-fpm
a2enmod proxy_fcgi
a2enconf php8.2-fpm

Ezek után a php beállításokat már az fpm-es php.ini-ben érdemes szerkeszteni (/etc/php/8.2/fpm/php.ini ). Ha ezzel megvagyunk akkor még egy opcache telepítést is érdemes megtenni.

apt install php-opcache

A telepítés után a beállítások itt találhatók: /etc/php/8.2/fpm/conf.d/10-opcache.ini

Az én beállításaim valahogy így néznek ki a teszt site-on:

zend_extension=opcache.so
opcache.jit=on
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=240
opcache.validate_timestamps=1

Érdemes továbbá a PHP által kezelt objektumokat perzisztens módon tárolni, pl. memcached-ben.

apt install memcached

A konfiguráció itt található: /etc/memcached.conf de nagyon nem kell bántani, talán a memória méretét érdmes megemelni 127 mb-ra (alapból 64)

service restart memcached
apt install php-memcached
apt-get install php-pear php-dev zlib1g-dev
pecl channel-update pecl.php.net
pecl install memcache

Php.ini-be fel kell venni: extension=memcache.so majd újra kell indítani az fpm php-t.

WordPress plugin-ből érdemes telepíteni az alábbit:

Memcached Object Cache

Így majd kapunk értesítést a wordpres-sen belül, ha esetleg új verzió lenne. Sikeres telepítés után kézzel kell átmásolni a object-cache.php fájlt a /wp-content/plugins/memcached könyvtárból a wp-content könyvtárba. Majd felvenni a WP_CACHE_KEY_SALT változót a wp-config.php-be (a plugin leáírsa – readme.txt – alapján)

Ha működik a dolog, akkor a Query monitor Overview fülén tudjuk majd ellenőrizni:

Ha ezzel mind megvagyunk nincs más dolgunk, csak a wordpress oldalon is körülnézni egy kicsit. Itt nem érdemes kézzel matatni a dolgokban, nagyszerű plugin-ek vannak, amik megteszik ezeket helyettünk. Én az alábbiakra tettem le a voksom:

Query Monitor – hogy lásd mi történik

Memcached Object Cache – a php objektumok memcached-ben történő tárolásához

WP Rocket – a legenerált oldalak gyorsítása, és további optimalizálások (css, js minify, stb.)

Smush – kép tömörítés és konverzió webp formátumra (és igény esetén átméretezés adott limitre)

Ha mindent jól csináltunk, akkor egy viszonylag gyenge szerveren (Intel Pentium Processor E6700 és 1 Gb memória), az alábbit kellene látunk egy Elementor által generált oldal esetén.

Ui: eredetileg egy oldalbetöltés 3s volt…

Securing apache

Ha esélyt szeretnénk adni Apache szerverünknek az életre, érdemes az alap beállításokon módosítani pár dolgot.

A legfontosabb szabály, a szerverünk mindig legyen naprakész (apt update, apt upgrade, esetleg a paranoiásaknak chkrootkit)

Aztán érdemes meggyőzni az Apache-ot, hogy ne mondja el mindenkinek a verziószámát, így talán nehezebb lesz expolit-ot keresni benne:

ServerSignature Off
ServerTokens Prod

A második a mod_security. Ezt sajnos kicsit macerásabb beállítani, de megéri. Ehhez az alábbi lépésekre van szükség:

apt-get install libapache2-mod-security2
cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Ezután érdemes bekapcsolni a security használatát az újonnan létrehozott (modsecurity.conf) konfig fájlban (alapból csak detektálásra van állítva)

SecRuleEngine On

Ha ez megvan, már nincs másra szükségünk, csak friss biztonsági szabályokra (persze csak egy gyors backup után).

mv /usr/share/modsecurity-crs /usr/share/modsecurity-crs.bak
git clone https://github.com/coreruleset/coreruleset.git /usr/share/modsecurity-crs

Majd ezt lehet frissítgetni időnként az alábbi paranccsal:

cd /usr/share/modsecurity-crs
git pull

Ezután még példányosítani kell a configot:

cp /usr/share/modsecurity-crs/crs-setup.conf.example /usr/share/modsecurity-crs/crs-setup.conf

Ha ez megvan, és a szerveren futtatunk valamilyen speciális dolgot (Pl. WordPress) akkor érdemes azt kivételként megadni. Az új configunkban (crs-setup.conf) az alábbi sorokat kell kicommentelni, és a megfelelő rendszerhez 1-est írni:

 SecAction \
  "id:900130,\
   phase:1,\
   nolog,\
   pass,\
   t:none,\
   setvar:tx.crs_exclusions_cpanel=0,\
   setvar:tx.crs_exclusions_dokuwiki=0,\
   setvar:tx.crs_exclusions_drupal=0,\
   setvar:tx.crs_exclusions_nextcloud=0,\
   setvar:tx.crs_exclusions_phpbb=0,\
   setvar:tx.crs_exclusions_wordpress=1,\
   setvar:tx.crs_exclusions_xenforo=0"

És már meg is tettük az első lépéseket egy biztonságosabb Apache szerver felé.

Sose feledjétek: biztonságos rendszer nincs, max. biztonságosabb…

A router, az agy, és két füstölgő puskacső

Olyan szerencsés helyzetben vagyok, hogy az utcánkban fellelhető pokoli ADSL vonalat már jó ideje optikára cserélte a T. Mivel a média fogyasztási szokásaink teljes egészében átcsatornázódtak az online felületekre (Netflix, HBO online, Youtube, Twitch, Spotify és társai), az internet előfizetést is átcsoportosítottam, és a kábeltévé helyett lett az 1000mbit/s .

Elsőre ez jól hangzik, de az ördög a részletekben rejlik. Pl. a T által adott modem még elméletileg sem tud ennyi adatot átengedni magán, kezelni aztán meg végkép nem. Ezt gondolom ők is érezték, ezért adtak mindenféle instrukció nélkül egy D-LINK (brrrr) DIR-842-es “router”-t.

A koncepció az lehetett, hogy bár a noname kínai modem nem tudja kihajtani a vonalat, ha a D-LINK-et használjuk erre PPPoE módban (tehát kvázi modemként) akkor valamivel jobb lesz a helyzet. Ezzel a setup-al kb. 600-800mbit/s már elérhető az 1000-ből ha nem nagyon terhelt a hálózat. Gondoltam egy PPPoE beállítás nem okozhat gondot (első hiba). Már a PPPoE jelszóval elakadtam, amit bár láttam a T-COM-os modem felületén, de csak jelszó mezőként. Visszaalakítottam text-é ami egy elkódolt karaktersorozatot tartalmazott. Sikerült firmware-t találnom hozzá, amúgy is szeretem az ilyen cuccok dolgait nézegetni, pár óra alatt meg is lett a kódolást végző script, meg nekem a python átiratom hozzá, így már nem csak felhasználónevem, hanem jelszavam is volt.

Széttúrtam az addigi infrastruktúrát, bekötöttem a routert ami az átvétel óta a polcon porosodott, és vártam a széles sávú csodát.

Ennyi élettapasztalattal már tudom, hogy csodák csak ritkán vannak (ezért hívják őket csodának), így meg sem lepődtem, amikor az internet kapcsolatot jelző ikon továbbra is pirosan világított.

Olvastam kicsit a neten, elviekben összedugdosás után mindennek magától kellene működnie, ezzel is elment pár óra, végül csak felhívtam az ügyfélszolgálatot, ahol a szokásos intró után (tududu du dummmm) egy AI-nak kellett volna elmagyaráznom, hogy nem működik a PPPoE kapcsolatom… Elég jól elbeszélgettünk, aminek átirata valahogy így nézett ki:

  • Üdvözlöm, én az ostoba AI vagyok, amit rengeteg pénzért eladtunk a TCOM-nak, felismerek szavakat amiket hallok aztán majd lesz valami
  • Szia, én az ügyfél vagyok, és nem működik a PPPoE kapcsolatom
  • Az interneteléréssel van probléma?
  • Igen
  • Hálózati probléma van?
  • Nem
  • Az Internet eléréssel van probléma?
  • ….

A végén már egész jól tudtam, milyen szavakat kerüljek a kommunikációnk során, és akkor 2-3 teljesen felesleges kör után az ügyintézőhöz kapcsol… Ezúton is köszi valakinek, aki kitalálta ezt a szart, és jár a gratuláció annak aki meg is vette.

Ezek után megtudtam, hogy PPPoE jelszót meg tudom változtatni online is, ezt a kört meg is futottam (feleslegesen, mert mint kiderült jól fordítottam vissza a jelszót, nem az volt a gond), továbbra sem lett jó. Ismét telefonáltam, AI, várakozás, elmondták, hogy ők nem tudják, kérdés van e internet PPPoE nélkül. Mondom van. Hát akkor ők nem tudják, ők csak a routerig érdekesek, hívjam a fizetős ügyfélszolgálatot.

Itt volt az első pillanat, amikor legszívesebben elővettem volna azt a bizonyos puskacsövet, és bementem volna az ügyfélszolgálatra ügyet intézni. De mivel én ilyen visszafogott csávó vagyok, puskacsövek nélkül, 3-4 órányi beszélgetés után úgy döntöttem lesz ami lesz, felhívom a fizetős ügyfélszolgálatot (szuperszervíz), ahol a srác tényleg értelmesebb volt mint a másik helyen az összes többi együtt, és korrekt is, mert elmagyarázta, hogy ez pénzbe fog kerülni ha segít, de igazából nem is tud segíteni, mert ezt a problémát a T ingyenes ügyfélszolgálata tudja megoldani, mégpedig úgy, hogy átkapcsolják a fos modemjüket PPPoE módba. Abban maradtunk, hogy ne mondjak bonyolult mondatokat, ne is próbáljam meg elmondani, hogy miért meg hogyan, csak azt mondjam hogy “modem -> PPPoE mód -> bekapcsolás”. Akkor hátha átmegy az üzenet.

Felhívtam őket, lekűzdöttem az intelligens asszisztenst (az uborkákról és a paradicsomokról beszélgettünk), hogy aztán egy vele egyszintű emberi hasonszőrűvel kb. 25 perc várakozás után lefolytassam a következő beszélgetést:

  • Legyen kedves átkapcsolni a modememet PPPoE módba
  • Ööö nem tudom miről beszél, de átkapcsolom egy technikus kollégákhoz

Ez volt az a pont, amikor már csak 30 perc választott el attól, hogy a technikus kolléga az én “régi” eszközömet távolról PPPoE módba tudja kapcsolni. Hittem benne, hogy meg tudja csinálni, kb. 3x mondta, hogy egy pillanat, még kipróbálok valamit, és én egyszer se mondtam el neki Yoda mester örök érvényű szavait: tedd, vagy ne tedd, de ne próbáld… Pedig sokszor eszem bejutott…

Ezek után el is indult az internet, és jött a következő állomás, az igen neves D-Link cég routernek nevezett terméke, ami egész addig működött, amíg nem próbáltam beállítani rajta pár port forward szabályt. Aztán kicsit önellentmondásba keveredett a saját route szabályaival, és bizonyos kérések hatására meg-megállt pár percre. No meg egy port forward szabály se működött…

Sajnos az OpenWrt, DDWrt körről pont egy hw revízióval maradtam le, szóval ez a router max wifi AP-nek használható… Sebaj, ahogy a mondás tartja, ingyen routernek ne nézd a firmware-jét, elkezdtem hát inkább más routereket nézni.

A router piac teljesen megváltozott mostanában. Vannak már Gaming routerek, amik erősen középkategóriásak, és mind wifi-s. Az áruk nem azért sok, mert annyira tudnak route-olni, meg csomagokat kezelni, hanem mert a legszuperebb wifi szabványokat támogatják, ami nekem pont nem kell. De ha kellene se fizetném ki egy kisebb számítógép árát, egy wifi routerért, ami sok mindent tud, de gyorsan, és jól routolni azt pont nem. Ami tényleg jó, és bír sok klienst, meg nagy sávszélességet az kb. 80k és még wifi sincs benne. Mivel a PPPoE már megvolt, a szerverem úgy is mindig megy, gondoltam átrakom a router funkcionalitást oda. Ott nem lesz melegedési gond, és a PPPoE, routing, és társai kb. nem kimutatható cpu kapacitást emésztenek fel egy mai gépen. Ezzel egy probléma volt, amit pedig úgy hívtak, Microsoft.

Tudtam, hogy nem lesz egy leányálom Windows 8 alatt routing-ot konfigurálni, főleg olyat, ami nekem kell.

Ez az a pont, ahol megint számot kell vetnem magammal, és leírnom, miért is váltottam windows szerverre:

  • akkor és ott jó ötletnek tűnt
  • szeretem a kihívásokat
  • van rajta onedrive kliens
  • van rajta norton antivírus amiből volt egy privát előfizetésem
  • unalmas volt, hogy ubuntu alatt minden átlátható, és általában működik is

Szóval a PPPoE kapcsolat felkonfigurálása gyorsan ment. Van ott egy kis kavar, hogy a fizikai interfész furcsa státuszban marad amin a kapcsolat megy, de kikapcsoltam róla minden protokollt, akkor már nem sok vizet zavart. Az internet megosztásért az Internet connection sharing felel, pár kattintás, és láss csodát működik. Pontosabban: működik, olyan microsoft-osan.

Egy demo erejéig ezek a funkciók nagyszerűek, és jól prezentálhatók. Csak éppen a megosztás után a teljes belső subnet-em elmászott a 192.168.137.x tartományba. Gondoltam sebaj, kerestem a neten, meg lehet változtatni. Meg is változtattam, itt:

HKLM\System\CurrentControlSet\services\SharedAccess\Parameters
(REG_SZ) ScopeAddress
(REG_SZ) StandaloneDhcpAddress

Ezek után már volt DHCP szerverem, csakhogy olyan módon, hogy a létező teljes címtartományból oszt címeket… Hogy mi alapján rejtély. Ez nem annyira jó, mert nálam nem minden DHCP-ről megy, és van pár dolog aminek akkor is fix ip kellene, ha arról menne (pl. QoS miatt). Na range definíciót, vagy hw adress mapping-et persze már nem tud. Gondoltam sebaj, elengedem, használok másikat, vagy konfigurálok egyet linuxon, de ezt a csodát kikapcsolni se nagyon lehet. Én az alábbit tettem: a lan interfész IP címét megváltoztattam az ICS beállítás után, a registryben pedig egy másik címtartományt adtam meg. így valamiért a routing működött (talán mert az interface alapú…) de a DHCP szerver nem tud mit kezdeni magával és az eltérő címtartományokkal, ezért el sem indul (erről persze se log, se dokumentáció, se semmi). Innentől már csak az OpenDhcp szervert kellett telepíteni, és volt is normális belső hálózatom DHCP-vel, windows alatt.

Aztán ott van a windows tűzfal, a maga 100000 szabályával. Ezt elég egyszerűen bekonfiguráltam. Letöröltem mindent, felvettem azt a 6 szabályt ami nekem kellett (Deny All, Allow lan, pár port), és láss csodát működött. A windows tűzfal nem rossz, csak szerintem külön csapat csinálta a tűzfalat, és a front-end konfigurációt.

Miután már tűzfalam is volt, csak a port forwarding volt hátra. Ezt a PPPoE adapternél az ICS beállításoknál lehet matatni, egyszerű: Port, hova, protokoll, és kész is. Elméletben. Minden forgalom, ami a szerverre érkezett, az működött. Minden ami külső szerverre (pl. a virtual box-ban futó ubuntu-ra) az nem. Ezzel futottam pár kört, a megoldást végül szintén egy külső alkalmazás jelentette: a PassPort ami egy egyszerű port forwarding implementáció. Tehát a WAN lábról forwardoltam a portokat a szerverre, a szerverről ezzel a belső hálózatra, és így már működik.

A fenti problémák elviekben korrektebbül megoldhatóak Windows server edition alatt (ott pl. van RRAS is), de nekem nem ilyen windows-om van 🙂

A QoS-t már tényleg point and click-el beállítottam, azok a fejlesztők valószínű a tűzfalas fejlesztőkkel voltak haverok 🙂

Ezek után jött a teszt, ami egy egyszerű Ookla-s speedtest volt. Az eredmény egy kék halállal egybekötött kernel security check volt… Itt már kicsit elvesztettem a lelkesedésemet, és nagyon csúnyán kezdtem nézni a norton antivírusra. A csúnya nézésből a 3. konfigurációs próbálkozás és kifagyás után uninstall lett, és láss csodát. 2-3 nap alatt talán sikerült a windows 8.1-ből egy normális router gépet faragni…

Windows és a fájlnevek

Azt hittem a “hosszú” fájlnevek problémája csak az emlékeimben él, és a minket követő generációk számára ez a fogalom (akárcsak a ~1 végű fájlok) ismeretlen lesz. Úgy tűnik a Windows ezt másképp gondolja, Ő még őrzi a régi hagyományokat:

Én tényleg nem tudom ki, és mit üzemeltet windows alatt, de minden tiszteletem az övé…

Hibabejelentés

Előző héten eltűnt az internet, és a magam visszafogott módján próbáltam jelezni a szolgáltatónak, hogy nem annyira jófejség családokat a digitális őskorba száműzni…

Sajnos nem jártam sikerrel (legalábbis 3 nap múlva még mindig nem volt net), ezért úgy gondoltam ideje szakember segítségét kérni. Baráti segítséggel (köszi Attis!) megtaláltam az ide vonatkozó hanganyagot. Mivel hosszas gyakorlás után sem tudtam megközelíteni a mester teljesítményét, ezért inkább megvágtam az anyagot, későbbi felhasználásra.

Szóval ha elmenne az internet, akkor hangfal felhangosít, háttérzaj leszáll, és indulhat is a panaszbejelentési folyamat, az alábbi mankókkal.

Nem akarsz elmenni a picsaba

Szar az adsl te meg ott vakarozol

Mit csinalsz ott

Nem lenne szar az adsl ha dolgoznal

Picsaba bazd meg

Szar az adsl erted es vakaroztok ottan

Mit kepzeltek

Vakarozol es szar az adsl nem tudunk netezni

Itt van az egesz csaladom es nem tud senki netezni

Nem megy erted, javitsd meg bazdmeg

Itt van ez a szar, ra van irva, hogy ize

Mondom, hogy vakarozol bazdmeg

Mozgas, nem erek ra bazdmeg

Meg ma bazdmeg, mintha elnel

Nem sertegetlek, de faszom tele, hogy nem megy az internet

 

Ha épp megy az internet, és csak amolyan munka utáni felüdülésként szeretnéd magadba szívni a hatékony panaszbejelentés rejtelmeit, akkor rakd be alá Ellen Allien – Jack My Ass c. számát, és nyomogasd random a play gombot… 🙂

 

Ui: amire elkészültem a wav-okkal, addigra érkeztek meg a levelek a szerveremtől, hogy dolgokat nem tudott elintézni, de most már minden ok… Így élesben nem tudtam tesztelni a dolgot, de ami késik, nem múlik 🙂

Intel processzorok rejtett beállításai

Az utóbbi időben a processzorok órajele mellett azok energia gazdálkodási funkcióit is jelentősen fejlesztették, ami elég hasznos egy laptop esetén, és nem mindig hasznos pl. valós idejű használat során egy asztali gépben.

Akit nem érdekel a fogyasztás, ellenben konstans performanciát szeretne elérni, érdemes lehet módosítani az alapértelmezett energiagazdálkodási beállításokat (power options).

Ehhez egy jó kiindulási alapot nyújthat az alábbi cikk:

http://www.dozty.com/how-to-unlock-the-hidden-features-of-processor-power-management/

Windows boot time

Az újabb Windows verziók kapcsán – kivéve Windows 10 – a Microsoft kiemelt figyelmet fordított az operációs rendszer teljesítménye. Az ez irányú törekvések emlékét őrzik az egyre jobb performancia elemző eszközök, mint pl. a Task Manager (és az onnan elérhető Resource Monitor). Bár ezek továbbra sem váltják ki a jó öreg Process Explorer, Process Monitor-t, de az esetek egy részében a problémák már detektálhatók natív windows-os eszközökkel (is).

A szuper optimalizált windows-om a napokban ismét lehetőséget biztosított, hogy foglalkozzak vele kicsit, mert login előtt megállt, és várt vagy 20 másodpercet, ezután dobott a login képernyőre. Mivel itt még boot fázisról beszélünk, sajnos a fenti eszközök egyike sem használható. Első körben megnéztem az event log-ot, hátha találok benne valami érdekeset (ahogy a mondás tartja, aki keres az talál), de ennek a várakozáshoz sajnos nem volt köze.

Egyéb okokból már telepítve volt a gépen a Windows Assessment and Deployment Kit (Windows ADK) Windows Performance Analyzer komponense, ami lehetőséget biztosít trace-k készítésére, azok elemzésére, akár boot idő alatt is.

A használatához rá kell venni a windows-t, hogy trace fájlt generáljon, melyből majd kideríthetjük, hogy mi is történik a vizsgált időszakban. Régen ehhez pár száz karakterből álló parancssort kellett készíteni (xbootmgr…), de a Microsoftnál is sejthették, hogy ez ebben a formában nem valami jó, és egy szorgalmas fejlesztőnek hála ma már ezt konfigurálhatjuk grafikus felületen is (na jó a felület képességeit nem vitték túlzásba, de hát ki a kicsit nem becsüli…).


wprui.exe

Az ily módon megkeletkezett fájlt (pl.: boot_1.etl) a Windows Performance Analyzer-rel tudjuk alaposabban megvizsgálni. Mivel az én problémám a boot alatt jelentkezett, de még login előtt, az első nézet amit bekapcsoltam a Boot Phases volt. Itt már látszott, hogy a bejelentkezés előtt a Winlogon init 31 másodpercig tartott, ami gombócból is sok, nem hogy boot időből…

A fenti nézethez hozzádobtam még a Processes nézetet, hogy látszódjon milyen alkalmazások indultak el ezen idő alatt.

 

A processeket vizsgálgatva feltűnt egy alkalmazás ami a login inittel indult, és 29.9 másodpercig futott… Ez az alkalmazás pedig nem volt más, mint az OriginWebHelperService.exe…

Ezután eszembe jutott, hogy nemrég elindítottam az Origin-t, és frissítette magát… A process egyébként service-ként települt, a frissítés rakta fel/kapcsolta be, ott kellett kikapcsolni, és a probléma megszűnt… Ezúton is köszönöm az EA-nak a fejtörőt, szórakoztatóbb volt, mint a legtöbb mostani játékuk 😉

 

Windows PC optimalizálás

Réges rég elkövettem azt a hibát,  hogy windows alapú gépen kezdtem el zenélni. Aztán hozzászoktam, megszerettem, és bár azóta volt szerencsém más operációs rendszereket is kipróbálni, a végén mindig visszatértem hozzá. A számítógépen történő zenélés nagyon furcsa dolog, ha menet közben bármi megakad, akkor lehet újracsinálni a munka egy részét, és vannak olyan pillanatok, amiket később már nem lehet, vagy nagyon nehéz újracsinálni, tehát ehhez egy elég stabil rendszer kell. Sokan ezen a ponton alapból lemondanak a windows-ról, pedig kitartó munkával (és nem kevés utánajárással) meglepő eredményeket lehet elérni, hozzáállás kérdése az egész. Míg egy debiant szépen lassan épít fel az ember, a windowsnál épp az ellenkezőjét kell csinálni, szépen lassan lebontani a rétegeket.

tl;dr: Az optimalizált windows olyan mint egy jó versenyautó: Gyors, de egyáltalán nem kényelmes. Átlag felhasználóként a driverek frissítése az egyetlen szükséges lépés, a többi beállítás inkább problémát fog okozni, és érezhető előnyt nem jelent.

Mi is az optimalizálás célja: az alkalmazásunk működése és a hw komponensek között a lehető legkisebb késleltetés történjen, és ebbe az operációs rendszer lehetőleg ne keverjen bele.

Hardware:

  • lehetőleg dedikált hangkártyát használjunk (pci / firewire)
  • az usb eszközök számát minimalizáljuk (ps/2 billentyűzet)
  • usb hub-ot semmiképp se használjunk

BIOS:

  • kapcsoljuk ki a hyper threadingot
  • mindenféle virtualizáció támogatást
  • HPET-et
  • Integrált videó és hangkártyát

Driverek:

Ha ezzel megvagyunk, akkor állhatunk neki a windows-nak. Alapesetben én azt javaslom, hogy mindenből a legfrissebb drivert rakjuk fel, de a driver-ek minőségének megállapítása során csak a folyamatos mérések nyújthatnak támpontot. A driverek frissítésére kiválló a Snappy Driver Installer, a driverek minőségének ellenőrzésére a LatencyMon alkalmazást tudjuk használni.

Windows komponensek:

Ezek után el kell távolítani a windows összes olyan összetevőjét, amit valószínűleg sosem fogunk használni:

– Internet Exploder
– Windows Location Provider
– Work folders client
– XPS services
– XPS viewer

Én a print services-t is levettem, nem szándékozok papírra nyomtatni a közeljövőben.

Windows:

A főbb alapvetéseket a Focusrite elég jól összefoglalta, érdemes követni a leírásukat. A lényeg kivonatolva:

  • Power management -> high performance, cpu minimum és maximuma is 100% legyen
  • Rendszerhangok kikapcsolása
  • Processzor prioritás: Background services
  • Tűzfal, vírusírtó kikapcsolás
  • Vizuális effektek

És egy dolog, amit itt nem írnak: fix (min  == max) méretű swap file használata.

Hálózat:

Ha ez megvan, akkor kikapcsolhatjuk az összes olyan dolgot, amire nincs szükségünk a hálózaton (és lássuk be elég kevés dologra van szükségünk valójában):

snap75

Az IPV6 kikapcsolásához már a registry-t kell átírnunk: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\

new DWORD (32-bit) Value ->  DisabledComponents = 0xff

(forrás)

Amennyiben a hálózat késleltetése számít nekünk, akkor a szükséges optimalizációkat elvégezhetjük a TCPOptimizer nevű alkalmazással, de ez inkább streaming, és játékok esetén lehet hasznos.

Szolgáltatások:

Ezek után már csak azt kell elérnünk, hogy csak azok a programok fussanak, amire tényleg szükségünk van. Mivel a windows a legtöbb komponensét szolgáltatásokon keresztül indítja, itt is kell leállítanunk őket. Ezt a services.msc futtatásával tehetjük meg.

Bizonyos szolgáltatásokat viszont nem nagyon tudunk leállítani (mint pl. a Task Scheduler) mert a windows ezt nem engedi. Ezeket a registry segítségével tudjuk kikapcsolni.

A szolgáltatások kulcsait itt találjuk: HKLM\SYSTEM\CurrentControlSet\Services

A szolgáltatások rövid névvel kerülnek ide elmentésre, de azokat láthatjuk a service listában is, az adott szolgáltatás Properties oldalán (pl. a Task Scheduler neve Schedule)

Az indítás módát a Start tartalmazza, a 4 érték jelenti a Disabled beállítást. (forrás)

A szükséges szolgáltatások:

snap76

A többi dolog nem szükséges.

A TCP/IP NetBIOS helper szolgáltatás a SAMBA megosztások eléréséhez szükséges.

Amennyiben fájlokat szeretnénk megosztani, el kell indítani a Server szolgáltatást.

Amennyiben a Windows Update-t szeretnénk használni, akkor előtte el kell indítani az alábbi szolgáltatásokat:

  • Network List Service
  • Network Location Awareness
  • Background Intelligent Transfer Service
  • Windows update

Figyelem:

  • a BITS az operációs rendszer más dolgaihoz is kellhet (pl. nyelvek telepítése, DISM és SFC javításokhoz), csak akkor állítsuk le, ha ezek már mind rendben vannak.
  • a Task Scheduler leállítása után nekünk kell futtatni azokat a dolgokat, amik az operációs rendszer hatékony működését biztosítják, és a Task Scheduler időzítve futtatta őket (pl. a WinSxS könyvtár takarítását).

Alkalmazások:

Bár a fentiek után ezt külön kiemelni nem is érdemes, fontos, hogy a gépen csak az az alkalmazás fusson, amit használni akarunk, ezért a Task Manager Startup szekciójából mindent állítsunk disabled-re. Ez nem csak a rendszer teljesítményére lesz jó hatással, hanem a boot time-ra is (nálam jelenleg 5 másodperc alatti). Amire még szükségünk lehet az a ctfmon alkalmazás (C:\Windows\System32\ctfmon.exe) ami a tray-en a billentyűzet nyelvének állítását teszi lehetővé. De lehetőleg ezt is csak akkor indítsuk el, ha szükségünk van a magyar billentyűzetre, és utána zárjuk is be szépen.

A fentiek után már kész is a szuper munkára fogható windows-unk, ami valahogy így fog kinézni:

15036412_1241479802592529_2999654407216518174_n

 

 

Oracle adatbázis séma gyors törlése

Le akartam törölni pár nagyobb sémát Oracle alatt, aminek az lett az eredménye, hogy 20 órát futott a DROP USER… Kis olvasgatás után az körvonalazódott, hogy ezt a funkciót nem sikerült jól implementálni, ezért inkább töröljek kézzel mindent, és csak a végén töröljem a már üres sémákat… Nagy nehezen kiizzadtam magamból a lenti scriptet, ami működik is, de mivel az impdb implementációja sem sikerült teljesen ezért a végső megoldás az lett, hogy el kell dobni a teljes adatbázist, és újra kell gyártani nulláról… De ha már megírtam, akkor elmentem, hátha még jól jöhet a későbbiekben…

BEGIN
  FOR r1 IN ( SELECT 'DROP ' || object_type || ' ' || owner || '.' || object_name || DECODE ( object_type, 'TABLE', ' CASCADE CONSTRAINTS PURGE' ) AS v_sql
               FROM all_objects
               WHERE owner in ('SCHEMA1', 'SCHEMA2') AND 
                object_type IN ( 'TABLE', 'VIEW', 'PACKAGE', 'TYPE', 'PROCEDURE', 'FUNCTION', 'TRIGGER', 'SEQUENCE' ) 
                ORDER BY object_type, object_name ) LOOP 
    BEGIN 
     EXECUTE IMMEDIATE r1.v_sql; exception when others then null; 
    END; 
   END LOOP; 
  END; 
/ 

DROP USER CUSTOMER SCHEMA1 CASCADE;
DROP USER CUSTOMER SCHEMA2 CASCADE;

Windows shares

Több mint 10 éve linux alapokon működött a szerverem. Akkor azért váltottam Windowsról, mert feltörték a rajta futó IIS szervert egy expolit-on keresztül (szégyen gyalázat), és úgy döntöttem, többet ilyen nem lesz. Az utóbbi pár évben, viszont semmi sem történt… Rájöttem, hogy már nem szórakoztat az ubuntu, minden működik, már a dist upgradek sem a régiek, hogy utána összeomlana a rendszer és újra össze kell rakni darabokból… Szóval egy hirtelen ötlettől vezérelve, arra gondoltam, hogy megpróbálom ugyanezt Microsoft alapon is, mert miért is ne.

A Microsoft azért nem aprózza el ezt a bemutatkozás, és felhasználói élmény dolgot, az első pár nap alatt feltépődtek a régi sebek, jöttek újak, annak ellenére, hogy a Windows 3.1 óta midnig Windowst használtam desktopra…

A szerverem az Raspberry térhódításával majdhogynem csak egy NAS-ra degradálódott, pár extra funkcióval. Gondoltam első körben megosztok pár dolgot, elvégre mégiscsak az Ms találta ki az smb protokollt. Na de az összes meghajtót ami a gépben van, azt viszont nagyon nem terveztem megosztani.  Ez volt az első dolog (a windows 10 update dialógus ablak után) ahol gyökeresen eltért a véleményünk a dolgok menetével kapcsolatban… A Windows szerint nincs is annál jobb dolog, mint az administrative shares (nem tudom ki találta ki, és az IT security hogy hagyhatta ezt produkcióba kerülni, és azóta is miért létezik ez még egyáltalán, de legalább a net send-et kivették… az is valami 🙂

Aki ki szeretné kapcsolni ezen remek funkciót a gépén nem kell mást tennie, mint létrehozni egy AutoShareWKS nevű DWORD(32) kulcsot az alábbi helyre:


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Paramerts

Igen, még létre sincs hozva 1 értékkel, hogy csak át kelljen írni, és ezen infók fórumok útján terjednek…  Vannak dolgok, amik nem változnak, ekkor már éreztem, hogy megérkeztem 🙂

És természetesen a network credential-os bug-ot sem sikerült javítani az elmúlt ~20 év alatt. Pedig nem bonyolult reprodukálni. Fogunk egy szervert, ahol pár megosztás bárki számára lekérdezhető. Aztán belerakunk pár olyan megosztást, ami csak adott felhasználók számára elérhetőek. Amikor a windows authentikál először megpróbálja kérdés nélkül a bejelentkezett felhasználó adataival (Ez egyébként megint egy érdekes kérdés, miért történik így. Vajon csak nekem jutott eszembe, hogy egy speciális megosztással, és egy megfelelő rainbow táblával viszonylag egyszerűen megtudható az adott felhasználó jelszava?). Ha a windows egyszer sikeresen azonosította magát egy szerveren, akkor a felhasználó hiába ír be jó azonosító adatokat az idők végtelenségéig a privilegizált megosztáshoz, csak a lenti dialógusablakot fogja látni:

winAuth

Ilyenkor mindenki elkezdi keresni a szerveren a problémát, hiszen Access is denied, mi más lehet a probléma… Úgy gondolom, hogy az emberek többsége itt adja fel, de nézzük csak meg mi történik, ha ugyanezt tesszük parancssorból?

C:\Users\voji>net use \\192.168.1.10\openhab
The password is invalid for \\192.168.1.10\openhab.

Enter the user name for '192.168.1.10': openhab
Enter the password for 192.168.1.10:
System error 1219 has occurred.

Multiple connections to a server or shared resource by the same user, 
using more than one user name, are not allowed. 
Disconnect all previous connections to the server 
or shared resource and try again.

Minderről a GUI annyit mond, hogy Access is denied. Grafikus felületről akarsz csatlakozgatni mindenhova? Akkor úgysem értesz hozzá, minek is terhelne az operációs rendszer ezzel a sok felesleges információval… A “soft” mountokat GUI-ról szintén nem lehet látni, szóval amúgy is mindegy lenne… De ha már itt tartunk, akkor kicsit jobban megnézve, milyen share is van jelenleg “mountolva”:

C:\Users\voji>net use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
OK \\192.168.1.10\IPC$ Microsoft Windows Network
The command completed successfully.

Bizony, IPC (Inter Proces Communication), amit az RPC (Remote Procedure Call) használ. Egyszerűen hibátlan… És ha tudnátok, hogy az RPC-n belül még mennyi rövidítés van (EPM, COM+, BIT, RPCSS, és még csak a jéghegy csúcsát karcolgatjuk…)

A lényeg, hogy jelen probléma megoldására a bátrak használhatják az alábbi parancsot:

 net use * /d

Kevésbé bátrak beírhatják a * helyére a mount nevét is (ami a fenti példában: \\192.168.1.10\IPC$)

És ezek csak azok a dolgok amik NT4 óta így maradtak… Az újakba, mint pl. a fastboot még bele se mentünk… Pedig…

A microsoft kitalálta, hogy a kernel modulok, és driverek viszonylag ritkán változnak az operációs rendszer élete során, ezért ezeket felesleges is mindig nulláról betöltögetni. Ezért az új windows verziók esetében (8+) bevezették a fastboot-ot, ami annyit tesz, hogy amennyiben kikapcsoljuk a gépet, akkor valójában nem az történik, amire a felhasználó első körben számít. Ugyanis a windows fogja és hasonló dolgot csinál, mint amikor hibernate-t mondunk, egy különbséggel. Nem a teljes memóriát menti, hanem csak a futó szolgáltatások memóriaképét. Zseniális ötlet, akit érdekel, hogy működik, itt olvashat egy felületes cikket a témában: http://www.eightforums.com/tutorials/6320-fast-startup-turn-off-windows-8-a.html

A probléma nem is ezzel van, hisz mivel ez az alapbeállítás, a világ elég nagy részén így kapcsolják ki kedvenc operációs rendszerüket. Ellenben volt a windowsban egy funkció, amit elég gyakran használtam, mégpedig a Group Policy Editorban a startup / shutdown scripts. Ez pont annyit tud(ott), mint amit a neve is mond: megadható neki egy program, amit a rendszer Local System-ként végrehajt a rendszer indulása és leállása során. A fastboot viszont kicsit bekavart a képbe, mert a be/kikapcsolás már nem inicializálja a rendszert a megszokott módon, és ebben az esetben nem is fut le egyik megadott script se. Hogy ebből mit lát a végfelhasználó? Megírja a scriptet, restart, működik. Aztán shutdown, és nem fut az a script, ami az előbb még futott. Aztán előbb utóbb összerakja, hogy hát itt valaki nagyon vicces kedvében volt, mert a startup/shutdown script csak restart esetén fut. A megoldásra két lehetőség van: Vagy kikapcsoljuk a fastboot-ot tokkal-vonóval, és akkor működni fog a startup és shutdown script, vagy továbbra is használjuk a fastboot-ot, de akkor nincs lehetőségünk korrekt módon programokat futtatni a windows indulása/leállítása során (én legalábbis nem találtam, de ha valaki tud ilyet és megosztja velem, akkor jár neki a Mars szelet).

Aztán kipróbáltam még az új Storage Spaces Pool-t (gyk.: mdadm by microsoft). Azt még nem tudom, mi fog történni, ha összeomlik a RAID array, mert ezzel kapcsolatban a Microsoft azt mondja, hogy nem omlik, de ilyen apróságoktól nem szoktam megrettenni. Az mondjuk azért nem annyira bíztató, hogy a disk kivételéről még csak nem is zenélnek a grafikus felületen. A problémára a megoldást természetesen megint egy fórumban lehet megtalálni, vagy jobb esetben, a fórum alapján készült blogbejegyzésben 🙂

És a viccesebbnél viccesebb hibákról még nem is beszéltem. A mostani kedvencem a KB3053711 (user error-nak szoktam hívni). Tessék elolvasni a kapcsolódó knowledge base article-t és a javasolt megoldást… Igazából minden szava arany, csak azt sajnálom, hogy a kapcsolódó forráskódot nem mellékelték, mert ez már az a szint amit minden szakmabelinek látnia kellene…

A Microsoft egyértelműen utolérhetetlen a felhasználói élmény fokozásában… 🙂