Domanda

Ho un sistema quad core con applicazioni di terze parti che ogni tanto gira diversi processi (sempre lo stesso eseguibile ma diverse istanze di esso) e impiega il 100% del tempo della CPU. Ho anche un paio di servizi web in esecuzione sulla stessa scatola (IIS e terze parti).

Il problema con tutti i core occupati è che questo timeout di questo web server di terze parti (IIS funziona bene, solo più lentamente del solito). Non ho alcun controllo sul server Web di terze parti, fa parte del prodotto più grande e deve essere operativo. Quindi, ho provato a giocare con l'affinità del processore (tramite SysInternals Process Explorer) e limitare quei fastidiosi processi a 3 core su 4 e dedicare il 4 ° core al server Web di terze parti, e sembra funzionare abbastanza bene.

Il problema è che imposta l'affinità solo sul processo in esecuzione e non sul livello eseguibile, quindi dopo che quei processi finiscono e successivamente si rigenerano come nuovi processi è tutto uguale di nuovo - prendono tutti e 4 i core. Quindi, ho cercato su Google questa utility ImageCfg.exe di Microsoft ma non riesco a trovarla sul sito Web di Microsoft per il download e vedo che alcune persone l'hanno provato e ora si lamentano che non funziona davvero.

C'è un modo per mantenere l'affinità con l'eseguibile?

È stato utile?

Soluzione

Una caratteristica di Process Lasso è quella di impostare l'affinità di un processo ogni volta che viene avviato .

Altri suggerimenti

http: // waynes -world-it.blogspot.com/2009/06/processor-affinity-on-windows-server.html

PowerShell

Utilizzare PowerShell per impostare l'affinità del processore per uno o più processi in esecuzione. Di seguito è riportato uno script di esempio che imposta la maschera del processore di calc.exe sui primi 4 processori. Mi piace questo metodo perché lo script è semplice, sarebbe facile da pianificare, funziona su x86 e x64, supporta più processi con lo stesso nome e almeno in parte perché evidenzia quanto sia facile l'amministrazione con PowerShell.

Nota che se usi fattoriale di un numero elevato con calc.exe (n!) genererai una CPU al 100% che può essere utile per i test. La maschera di seguito è 0xf = 1111 - una maschera che consente l'uso solo dei primi quattro processori:

$calcSet = Get-Process -ProcessName "calc"
foreach ($calc in $calcSet) {$calc.ProcessorAffinity=0xF}

Potresti voler guardare il parametro / AFFINITY per start .

Dall'aiuto:

AFFINITY    The new application will have the specified processor
            affinity mask, expressed as a hexadecimal number.

Poiché l'affinità del processore su Windows è una maschera di bit, potrebbe essere necessario un po 'di sperimentazione, ma suppongo che 1 sia il primo core, quindi 7 sia i primi tre core e < codice> F essendo tutti e quattro. O 8 solo per il quarto.

È quindi possibile sostituire le attività pianificate o le scorciatoie con una chiamata a start con i parametri appropriati.

È possibile utilizzare lo shim dell'applicazione di affinità single-proc per forzare un processore a livello eseguibile, che imporrà il processo su un core.

Questo articolo, http://msdn.microsoft.com/en- us / library / bb173458.aspx , ha un paragrafo per abilitare lo spessore verso il basso.

Usa SetProcessAffinityMask () . E attenzione, L'affinità del processore è ereditata!

Dovrai utilizzare ImageFileExecutionOptions, in particolare il " Debugger " opzione e scrivi il tuo piccolo eseguibile che chiama SetProcessAffinityMask () su se stesso, quindi genera un nuovo processo, che è quello per cui vuoi impostare l'affinità. Impostalo come debugger e il gioco è fatto.

L'utilità ImageCfg.exe funziona. L'ho usato solo per risolvere un problema aziendale oggi. È disponibile da http://www.robpol86.com/pages/imagecfg.php

Imagecfg -a 0x3 xxx.exe

limita .exe a CPU0 e CPU1, ad esempio.

Chiaramente questa discussione non è aggiornata ma sto aggiungendo un commento comunque nel caso in cui qualcuno cerchi su questo argomento (come ho fatto io)

  

Potresti provare a impostare la priorità del processo in modo che anche se   decide di utilizzare il 100% della CPU, cosa che può avere una priorità maggiore   subentrare quando è necessario.

     

Farlo automaticamente (piuttosto che dover svolgere l'attività   manager) è qualcosa di cui ho chiesto tempo fa.

Il comando di avvio può essere utilizzato per impostare la priorità di avvio di un processo.

Eg. avvia " my path \ my process " / LOW per bassa priorità.

Switch di priorità consentiti LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL

Potrebbe essere chiamato ad esempio da un file batch.

Potresti provare a impostare la priorità del processo in modo che, anche se si decide di utilizzare il 100% della CPU, qualcosa che abbia una priorità più alta può prendere il posto quando è necessario.

Farlo automaticamente (piuttosto che dover giocare nel task manager) è qualcosa che I chiesto circa un po 'di tempo fa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top