Troubleshoot VMM: BITS Troubleshooting
Background Intelligent Transfer Service (BITS) transfers files (downloads or uploads) between a client and server and provides progress information related to the transfers. You can also download files from a peer. BITS can transfer files asynchronously between a client and a server. VMM uses BITS to transfer payload between managed computers. These data transfers are encrypted by using a self-signed certificate generated at the time a host machine is added to VMM.
Verify BITS outside of VMM
The following steps can be used to verify that BITS is working properly outside of VMM.
- BITSadmin can be downloaded here: BITSadmin
- Download examples here: BITSadmin examples
To verify BITS:
- Download BITSadmin.exe using the above link. It is also in the Windows Server 2003 Resource Kit. It does not appear in the tools directory, but is accessible from the command line.
- Click on … Start > Programs > Windows Resource Kit Tools > Command Shell
- This should open an elevated command prompt
- Create a C:\Temp directory if one does not already exist
- Type the following command: bitsadmin /transfer myDownloadJob /download /priority normal http://msdl.microsoft.com/download/symbols/debuggers/dbg_amd64_6.11.1.404.msi c:\temp\dbg_amd64_6.11.1.404.msi
- This command will automatically use BITSadmin.exe to test BITS functionality by downloading a file from our website to the local temp directory
- This should take 10-20 minutes to complete
- This test should be ran on the VMM management server, Host computer and Source machine
BITS Compact Server
This method will allow you to test BITS in the same manner in which VMM uses BITS.
On the destination host, try the following steps:
- Disable BITS Compact Server. This feature is found in the Add/Remove Feature wizard.
- Restart computer
- Re-enable BITS Compact Server
If you tried these steps and still have problems, run the following command on the host machine:
winrm invoke CreateJob wmi/root/microsoft/bits/BitsClientJob @{Displayname="Test of fake job";RemoteUrl="http://download.microsoft.com/download/D/0/E/D0E6D2C1-2593-4017-B26D-7375BC9263D5/PowerShell_Setup_amd64.msi";LocalFile="PATH_TO_LOCAL_DESTINATION";Type="0";ServiceAccount="0";Suspend="true";Description="Description for fake job"}
Replace PATH_TO_LOCAL_DESTINATION with a path to an existing directory, but to a non-existing file (e.g., c:\httpRec\test.txt, where directory c:\httpRec exists, but test.txt in that directory does not). Don't provide path to an existing file, as it might overwrite it. This will attempt to create a BITS client job to download a file from a fake url.
Take note of the output.
If job succeeds, record the JobId.
Example:
CreateJob_OUTPUT
JobId = {8DC2BE2F-0D2A-41B8-AEAD-F6DBED586E98}
ReturnValue = 0
If above command succeeds, clean up the job by the following command:
winrm Invoke SetJobState wmi/root/microsoft/Bits/BitsClientJob?JobID={8DC2BE2F-0D2A-41B8-AEAD-F6DBED586E98} @{JobState="0"}
Replacing jobID with the job ID for your job. If the JobId was not returned with the CreateJob command above, you can find created dummy job by:
bitsadmin /list /allusers
Look for job with above name/description.
Also look for any Suspended jobs and delete by using the following commands:
Bitsadmin /cancel {Job_GUID}
BITS Traces
Occasionally it will be necessary to obtain BITS traces while reproducing the error.
Create bitslog.cmd using below batch file
Open an elevated powershell and navigate to the "C:\bits folder"
Type the following commands:
Bitslog /enable
Bitslog /collect c:\bits # choose an appropriate directory name
Perform operations and reproduce failure
Type the following commands from powershell
Bitslog /disable
Collect the bits.log file for analysis
The following batch file should be renamed bitslog.cmd
@echo off
REM Script for enabling bits logging/collection to be used
REM while reporting BITS issues
setlocal ENABLEDELAYEDEXPANSION
set DEFAULT_LOG_SIZE=20
set DEFAULT_LOG_DIR=%TEMP%\bits-logs
set BitsKey=HKLM\Software\Microsoft\Windows\CurrentVersion\BITS
if {%1} == {} goto Usage
if {%1} == {/enable} goto :EnableLog
if {%1} == {/e} goto :EnableLog
if {%1} == {/disable} goto :DisableLog
if {%1} == {/d} goto :DisableLog
if {%1} == {/collect} goto :CollectLog
if {%1} == {/c} goto :CollectLog
goto :Usage
:EnableLog
if {%2} == {} (
set log_size=%DEFAULT_LOG_SIZE%
) else (
set log_size=%2
)
echo Enabling logging for BITS with log file size as %log_size%
reg add %BitsKey% /v LogFileFlags /t REG_DWORD /d 0xfbcf /f > NUL
reg add %BitsKey% /v LogFileSize /t REG_DWORD /d %log_size% /f > NUL
echo Restarting BITS for registry values to take effect
net stop bits
net start bits
goto :eof
:DisableLog
echo Disabling logging for BITS
reg delete %BitsKey% /v LogFileFlags /f > NUL
reg add %BitsKey% /v LogFileSize /f > NUL
echo Restarting BITS for registry values to take effect
net stop bits
net start bits
goto :eof
:CollectLog
if {%2} == {} (
set log_dir=%DEFAULT_LOG_DIR%
) else (
set log_dir=%2
)
if NOT EXIST %log_dir% (
md %log_dir% > NUL
if ERRORLEVEL 1 (
echo Failed to create the log dir %log_dir%. Not saving logs
goto :eof
)
)
echo Copying the BITS logs to %log_dir% directory
REM Flush the current log for BITS
logman update bits -ets -fd > NUL
copy %windir%\system32\bits.log %log_dir% /y
copy %windir%\system32\bits.bak %log_dir% /y
REM copy the build info
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v BuildLab >
%log_dir%\bld_info
REM get the output of bitsadmin
bitsadmin /list /allusers /verbose > %log_dir%\AllJobs.txt
goto :eof
:Usage
echo BITSLOG usage
echo bitslog /enable [^<no^>] - To enable BITS logging and specify the log size as ^<no^> MB
echo BITS service will be restarted
echo If ^<no^> is not specified, default is 20 MB
echo bitslog /disable - To disable BITS logging
echo BITS service will be restarted
echo bitslog /collect [^<dir^>] - To collect BITS logs in the specified dir
echo If ^<dir^> is not specified, default is %%TEMP%%\bits-logs
goto :eof
Useful KB Articles and Blogs
- How to Troubleshoot Slow BITS Performance, Hosts 'Not Responding' and 'Needs Attention' Communication Issues
- Transfers between the System Center Virtual Machine Manager server, the Library Server and the Virtualization Hosts may fail with Error 12700 or 2912
- P2V fails with Error 2912 0x80072F0C with System Center Virtual Machine Manager 2008 or System Center Virtual Machine Manager 2008 R2
More VMM Troubleshooting topics:
System Center 2012 – Virtual Machine Manager (VMM) General Troubleshooting Guide