Problem:
In einer Terminalserverumgebung unter Windows Server 2008 wurde eine 100% CPU-Auslastung festgestellt. Bei näherer Untersuchung wurde festgestellt, dass der Acrobat Reader (acrord32.exe) jeweils einen CPU-Kern mit 100% ausgelastet hat obwohl der Benutzer den Reader schon lange wieder geschlossen hatte. Das Programm lief also im Hintergrund weiter. Genügend viele Benutzer (=Anzahl CPU-Kerne) haben damit den Terminalserver vollständig blockiert.
Es zeigte sich, dass die Anzeige der Tipps (siehe Bild) beim Start des Adobe Readers dies versucht haben.
Hinweis: Diese Tipps werden auch beim Öffnen eines PDF-Dokumentes angezeigt.
Lösungen:
Eine Deaktivierung dieser Tipps kann über folgende Wege erfolgen
Variante 1:
Manuell pro Benutzer unter dem Menüpunkt „Bearbeiten – Voreinstellungen“:
Variante 2:
Setzen von Registrieschlüssel & -werten mithilfe von Skripten oder Gruppenrichtlinien:
Registrierungsschlüssel:
Version 10
HKEY_CURRENT_USERSoftwareAdobeAcrobat Reader10.0IPM (Adobe Reader X)
Version 11
HKEY_CURRENT_USERSoftwareAdobeAcrobat Reader11.0IPM (Adobe Reader XI)
Registrierungswerte:
bShowMsgAtLaunch (REG_DWORD) = 0
bDontShowMsgWhenViewingDoc (REG_DWORD) = 0
Variante 3:
Mithilfe des Adobe Customization Wizards bereits diese Werte bei der Installation mit verteilen:
Fazit:
Nach Aktivierung dieser Einstellungen bei allen Benutzern erfolgte eine zuverlässige Beendigung der acrord32.exe beim Programmbeendigung und auch keine hohe CPU-Auslastung. Was der Adobe Reader im Hintergrund durchgeführt hat entzieht sich unserer Kenntnis.
OK, es funktioniert.
Ein anderer Weg, durch den Schließvorgang des Ladesystems. Es besteht dann keine Notwendigkeit für Änderungen an der Registrierung, Parameter oder Einstellungen Acrobat Reader. Batch-Skript standardmäßig vorbereitet schließt AcroRd32.exe Verfahren und zu diesem Zweck wurde entwickelt, aber das Skript verwendet werden, um wie jedes andere Verfahren zu aufwendig System, das angehalten wurde, wenn das Skript Aufrufe an die entsprechenden Parameter zu schließen. Wenn dieser Parameter enthält einen langen Namen ein Leerzeichen, müssen Sie den Parameter in Anführungszeichen setzen. Innerhalb des Skripts, bis zum Beginn der mehrere Parameter bestimmt werden, zum Beispiel. Der Zeitraum der Aussetzung, die Zeit der erneuten Überprüfung, oder wo zu erstellenden Bericht ist (LOG). Das Skript schließt alle Prozesse erfüllen die Kriterien für jeden Anwender, natürlich, nicht das System, die nicht geschlossen werden können. Kann nützlich auf dem Server, die Arbeit vieler Benutzer.
Das Skript wird, sich als mindestens belastet Prozessor optimiert, aber es überprüft von Zeit zu Zeit, wenn Sie nicht über einen Prozess, um zu schließen.
Kopieren Sie den folgenden Text ein, und speichern Sie sie als Datei Batch (BAT) mit einem beliebigen Namen ein.
@echo off
REM Automatic closing Acrobat Reader or other process parameter specified in the call, which too much high the CPU
REM Preparing: Artur Zgadzaj other interests: http://www.widzenia.com
REM ———————————————————————————————
SET REPEAT_TIME_VERIFICATION_[seconds]=7
SET IDLE_TIME_[seconds]=5
SET LOG_FOLDER=C:UTILLOG
REM # # # # CHECKING OR IS STARTED AS ADMINISTRATOR # # # # #
FSUTIL | findstr /I „volume“ > nul&if not errorlevel 1 goto Administrator_OK
cls
echo ************************************
echo *** RUN AS ADMINISTRATOR ***
echo ************************************
echo.
echo.
echo Call up just as the Administrator. Abbreviation can be done to the script and set:
echo.
echo Shortcut ^> Advanced ^> Run as Administrator
echo.
echo.
echo Alternatively, a single run „Run as Administrator“
echo or in the Schedule tasks with highest privileges
pause > nul
goto:eof
:Administrator_OK
SET WD=day
if „%~1″==““ (SET Close_Process=AcroRd32.exe) else (SET „Close_Process=%~1“)
MD %LOG_FOLDER% 2>NUL
Setlocal EnableDelayedExpansion
:again
cls
echo Automatic closing %Close_Process%, which are charged to the processor too …&echo.&echo.
FOR /F „tokens=2,7,8 delims=,“ %%A IN (‚%SystemRoot%System32tasklist.exe /v /FO CSV^|find /I ^“%Close_Process%^“‚) DO (
SET PROC=%%C
SET PROC=!PROC:“=!
FOR /F „tokens=2,3 delims=:“ %%s IN („!PROC!“) DO (SET PR=%%t
if „!PR:~0,1!“==“0“ (SET /A PROC_TIME=%%s*60+!PR:~1,1!) else (SET /A PROC_TIME=%%s*60+!PR:~0,2!))
if !PROC_TIME! GTR %IDLE_TIME_[seconds]% (
SET PID=%%A
SET PID=!PID:“=!
%SystemRoot%system32taskkill.exe /PID !PID! /F
SET B=%%B
SET B=!B:%USERDOMAIN%=!
SET B=!B:%COMPUTERNAME%=!
SET Process_User=!B:“=!
if not „!DATE_WD!“==“%DATE%“ ((FOR /F „tokens=1″ %%W IN (‚POWERSHELL GET-DATE -format dddd‘) DO SET WD=%%W)&&SET DATE_WD=%DATE%)
echo %TIME:~0,8% ^(Hanging: !PROC:~-5!^) !Process_User! >>“%LOG_FOLDER%%DATE:-=.% ^(!WD:~0,3!^) Close_%Close_Process%.TXT“
)
)
TIMEOUT /T %REPEAT_TIME_VERIFICATION_[seconds]% > nul
goto again
Besteht dieses Problem nur unter Windows Server 2008 oder auch unter anderen Betriebssystemversionen?