mirror of https://github.com/apache/cassandra
update .ps1 line endings to CRLF
patch by Josh McKenzie; reviewed by Ala' Alkhaldi for CASSANDRA-7627
This commit is contained in:
parent
3e489dad7d
commit
6f15fe2609
|
@ -1,272 +1,272 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
param (
|
||||
[switch]$install,
|
||||
[switch]$uninstall,
|
||||
[switch]$help,
|
||||
[switch]$verbose,
|
||||
[switch]$f,
|
||||
[string]$p,
|
||||
[string]$H,
|
||||
[string]$E
|
||||
)
|
||||
|
||||
$pidfile = "pid.txt"
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function ValidateArguments
|
||||
{
|
||||
if ($install -and $uninstall)
|
||||
{
|
||||
exit
|
||||
}
|
||||
if ($help)
|
||||
{
|
||||
PrintUsage
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function PrintUsage
|
||||
{
|
||||
echo @"
|
||||
usage: cassandra.ps1 [-f] [-h] [-p pidfile] [-H dumpfile] [-E errorfile] [-install | -uninstall] [-help]
|
||||
-f Run cassandra in foreground
|
||||
-install install cassandra as a service
|
||||
-uninstall remove cassandra service
|
||||
-p pidfile tracked by server and removed on close (defaults to pid.txt)
|
||||
-H change JVM HeapDumpPath
|
||||
-E change JVM ErrorFile
|
||||
-help print this message
|
||||
-verbose Show detailed command-line parameters for cassandra run
|
||||
|
||||
NOTE: installing cassandra as a service requires Commons Daemon Service Runner
|
||||
available at http://commons.apache.org/proper/commons-daemon/"
|
||||
"@
|
||||
exit
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Note: throughout these scripts we're replacing \ with /. This allows clean
|
||||
# operation on both command-prompt and cygwin-based environments.
|
||||
Function Main
|
||||
{
|
||||
ValidateArguments
|
||||
|
||||
# support direct run of .ps1 file w/out batch file
|
||||
if ($env:CASSANDRA_HOME -eq $null)
|
||||
{
|
||||
$scriptDir = Split-Path $script:MyInvocation.MyCommand.Path
|
||||
$env:CASSANDRA_HOME = (Get-Item $scriptDir).parent.FullName
|
||||
}
|
||||
. "$env:CASSANDRA_HOME\bin\source-conf.ps1"
|
||||
|
||||
$conf = Find-Conf
|
||||
if ($verbose)
|
||||
{
|
||||
echo "Sourcing cassandra config file: $conf"
|
||||
}
|
||||
. $conf
|
||||
|
||||
SetCassandraEnvironment
|
||||
$pidfile = "$env:CASSANDRA_HOME\$pidfile"
|
||||
|
||||
$logdir = "$env:CASSANDRA_HOME/logs"
|
||||
$storagedir = "$env:CASSANDRA_HOME/data"
|
||||
$env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + " -Dcassandra.logdir=""$logdir"" -Dcassandra.storagedir=""$storagedir"""
|
||||
|
||||
# Other command line params
|
||||
if ($H)
|
||||
{
|
||||
$env:JVM_OPTS = $env:JVM_OPTS + " -XX:HeapDumpPath=$H"
|
||||
}
|
||||
if ($E)
|
||||
{
|
||||
$env:JVM_OPTS = $env:JVM_OPTS + " -XX:ErrorFile=$E"
|
||||
}
|
||||
if ($p)
|
||||
{
|
||||
$pidfile = "$p"
|
||||
$env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + ' -Dcassandra-pidfile="' + "$pidfile" + '"'
|
||||
}
|
||||
|
||||
if ($install -or $uninstall)
|
||||
{
|
||||
HandleInstallation
|
||||
}
|
||||
else
|
||||
{
|
||||
RunCassandra($f)
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function HandleInstallation
|
||||
{
|
||||
$SERVICE_JVM = """cassandra"""
|
||||
$PATH_PRUNSRV = "$env:CASSANDRA_HOME\bin\daemon"
|
||||
$PR_LOGPATH = $serverPath
|
||||
|
||||
if (-Not (Test-Path $PATH_PRUNSRV\prunsrv.exe))
|
||||
{
|
||||
Write-Warning "Cannot find $PATH_PRUNSRV\prunsrv.exe. Please download package from http://www.apache.org/dist/commons/daemon/binaries/windows/ to install as a service."
|
||||
Break
|
||||
}
|
||||
|
||||
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
|
||||
{
|
||||
Write-Warning "Cannot perform installation without admin credentials. Please re-run as administrator."
|
||||
Break
|
||||
}
|
||||
if (!$env:PRUNSRV)
|
||||
{
|
||||
$env:PRUNSRV="$PATH_PRUNSRV\prunsrv"
|
||||
}
|
||||
|
||||
$regPath = "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\"
|
||||
|
||||
echo "Attempting to delete existing $SERVICE_JVM service..."
|
||||
Start-Sleep -s 2
|
||||
$proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList "//DS//$SERVICE_JVM" -PassThru -WindowStyle Hidden
|
||||
|
||||
echo "Reverting to default TCP keepalive settings (2 hour timeout)"
|
||||
Remove-ItemProperty -Path $regPath -Name KeepAliveTime -EA SilentlyContinue
|
||||
|
||||
# Quit out if this is uninstall only
|
||||
if ($uninstall)
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
echo "Installing [$SERVICE_JVM]."
|
||||
Start-Sleep -s 2
|
||||
$proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList "//IS//$SERVICE_JVM" -PassThru -WindowStyle Hidden
|
||||
|
||||
echo "Setting launch parameters for [$SERVICE_JVM]"
|
||||
Start-Sleep -s 2
|
||||
|
||||
# Change delim from " -" to ";-" in JVM_OPTS for prunsrv
|
||||
$env:JVM_OPTS = $env:JVM_OPTS -replace " -", ";-"
|
||||
$env:JVM_OPTS = $env:JVM_OPTS -replace " -", ";-"
|
||||
|
||||
# Strip off leading ; if it's there
|
||||
$env:JVM_OPTS = $env:JVM_OPTS.TrimStart(";")
|
||||
|
||||
# Broken multi-line for convenience - glued back together in a bit
|
||||
$args = @"
|
||||
//US//$SERVICE_JVM
|
||||
--Jvm=auto --StdOutput auto --StdError auto
|
||||
--Classpath=$env:CLASSPATH
|
||||
--StartMode=jvm --StartClass=$env:CASSANDRA_MAIN --StartMethod=main
|
||||
--StopMode=jvm --StopClass=$env:CASSANDRA_MAIN --StopMethod=stop
|
||||
++JvmOptions=$env:JVM_OPTS ++JvmOptions=-DCassandra
|
||||
--PidFile "$pidfile"
|
||||
"@
|
||||
$args = $args -replace [Environment]::NewLine, ""
|
||||
$proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList $args -PassThru -WindowStyle Hidden
|
||||
|
||||
echo "Setting KeepAliveTimer to 5 minutes for TCP keepalive"
|
||||
Set-ItemProperty -Path $regPath -Name KeepAliveTime -Value 300000
|
||||
|
||||
echo "Installation of [$SERVICE_JVM] is complete"
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function RunCassandra([string]$foreground)
|
||||
{
|
||||
echo "Starting cassandra server"
|
||||
$cmd = @"
|
||||
$env:JAVA_BIN
|
||||
"@
|
||||
$arg1 = $env:JVM_OPTS
|
||||
$arg2 = $env:CASSANDRA_PARAMS
|
||||
$arg3 = "-cp $env:CLASSPATH"
|
||||
$arg4 = @"
|
||||
"$env:CASSANDRA_MAIN"
|
||||
"@
|
||||
|
||||
$proc = $null
|
||||
|
||||
if ($verbose)
|
||||
{
|
||||
echo "Running cassandra with: [$cmd $arg1 $arg2 $arg3 $arg4]"
|
||||
}
|
||||
|
||||
if ($foreground -ne "False")
|
||||
{
|
||||
$cygwin = $false
|
||||
try
|
||||
{
|
||||
$uname = uname -o
|
||||
$cygwin = $true
|
||||
}
|
||||
catch
|
||||
{
|
||||
# Failed at uname call, not in cygwin
|
||||
}
|
||||
|
||||
if ($cygwin)
|
||||
{
|
||||
# if running on cygwin, we cannot capture ctrl+c signals as mintty traps them and then
|
||||
# SIGKILLs processes, so we'll need to record our $pidfile file for future
|
||||
# stop-server usage
|
||||
if (!$p)
|
||||
{
|
||||
$arg2 = $arg2 + " -Dcassandra-pidfile=$pidfile"
|
||||
}
|
||||
}
|
||||
|
||||
$arg2 = $arg2 + " -Dcassandra-foreground=yes"
|
||||
|
||||
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
|
||||
$pinfo.FileName = "$env:JAVA_BIN"
|
||||
$pinfo.RedirectStandardInput = $true
|
||||
$pinfo.UseShellExecute = $false
|
||||
$pinfo.Arguments = $arg1,$arg2,$arg3,$arg4
|
||||
$p = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo = $pinfo
|
||||
$p.Start() | Out-Null
|
||||
echo $p.Id > $pidfile
|
||||
$p.WaitForExit()
|
||||
}
|
||||
else
|
||||
{
|
||||
$proc = Start-Process -FilePath "$cmd" -ArgumentList $arg1,$arg2,$arg3,$arg4 -PassThru -WindowStyle Hidden
|
||||
|
||||
$exitCode = $?
|
||||
|
||||
try
|
||||
{
|
||||
echo $proc.Id > $pidfile
|
||||
}
|
||||
catch
|
||||
{
|
||||
echo @"
|
||||
WARNING! Failed to write pidfile to $pidfile. stop-server.bat and
|
||||
startup protection will not be available.
|
||||
"@
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-Not $exitCode)
|
||||
{
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Main
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
param (
|
||||
[switch]$install,
|
||||
[switch]$uninstall,
|
||||
[switch]$help,
|
||||
[switch]$verbose,
|
||||
[switch]$f,
|
||||
[string]$p,
|
||||
[string]$H,
|
||||
[string]$E
|
||||
)
|
||||
|
||||
$pidfile = "pid.txt"
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function ValidateArguments
|
||||
{
|
||||
if ($install -and $uninstall)
|
||||
{
|
||||
exit
|
||||
}
|
||||
if ($help)
|
||||
{
|
||||
PrintUsage
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function PrintUsage
|
||||
{
|
||||
echo @"
|
||||
usage: cassandra.ps1 [-f] [-h] [-p pidfile] [-H dumpfile] [-E errorfile] [-install | -uninstall] [-help]
|
||||
-f Run cassandra in foreground
|
||||
-install install cassandra as a service
|
||||
-uninstall remove cassandra service
|
||||
-p pidfile tracked by server and removed on close (defaults to pid.txt)
|
||||
-H change JVM HeapDumpPath
|
||||
-E change JVM ErrorFile
|
||||
-help print this message
|
||||
-verbose Show detailed command-line parameters for cassandra run
|
||||
|
||||
NOTE: installing cassandra as a service requires Commons Daemon Service Runner
|
||||
available at http://commons.apache.org/proper/commons-daemon/"
|
||||
"@
|
||||
exit
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Note: throughout these scripts we're replacing \ with /. This allows clean
|
||||
# operation on both command-prompt and cygwin-based environments.
|
||||
Function Main
|
||||
{
|
||||
ValidateArguments
|
||||
|
||||
# support direct run of .ps1 file w/out batch file
|
||||
if ($env:CASSANDRA_HOME -eq $null)
|
||||
{
|
||||
$scriptDir = Split-Path $script:MyInvocation.MyCommand.Path
|
||||
$env:CASSANDRA_HOME = (Get-Item $scriptDir).parent.FullName
|
||||
}
|
||||
. "$env:CASSANDRA_HOME\bin\source-conf.ps1"
|
||||
|
||||
$conf = Find-Conf
|
||||
if ($verbose)
|
||||
{
|
||||
echo "Sourcing cassandra config file: $conf"
|
||||
}
|
||||
. $conf
|
||||
|
||||
SetCassandraEnvironment
|
||||
$pidfile = "$env:CASSANDRA_HOME\$pidfile"
|
||||
|
||||
$logdir = "$env:CASSANDRA_HOME/logs"
|
||||
$storagedir = "$env:CASSANDRA_HOME/data"
|
||||
$env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + " -Dcassandra.logdir=""$logdir"" -Dcassandra.storagedir=""$storagedir"""
|
||||
|
||||
# Other command line params
|
||||
if ($H)
|
||||
{
|
||||
$env:JVM_OPTS = $env:JVM_OPTS + " -XX:HeapDumpPath=$H"
|
||||
}
|
||||
if ($E)
|
||||
{
|
||||
$env:JVM_OPTS = $env:JVM_OPTS + " -XX:ErrorFile=$E"
|
||||
}
|
||||
if ($p)
|
||||
{
|
||||
$pidfile = "$p"
|
||||
$env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + ' -Dcassandra-pidfile="' + "$pidfile" + '"'
|
||||
}
|
||||
|
||||
if ($install -or $uninstall)
|
||||
{
|
||||
HandleInstallation
|
||||
}
|
||||
else
|
||||
{
|
||||
RunCassandra($f)
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function HandleInstallation
|
||||
{
|
||||
$SERVICE_JVM = """cassandra"""
|
||||
$PATH_PRUNSRV = "$env:CASSANDRA_HOME\bin\daemon"
|
||||
$PR_LOGPATH = $serverPath
|
||||
|
||||
if (-Not (Test-Path $PATH_PRUNSRV\prunsrv.exe))
|
||||
{
|
||||
Write-Warning "Cannot find $PATH_PRUNSRV\prunsrv.exe. Please download package from http://www.apache.org/dist/commons/daemon/binaries/windows/ to install as a service."
|
||||
Break
|
||||
}
|
||||
|
||||
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
|
||||
{
|
||||
Write-Warning "Cannot perform installation without admin credentials. Please re-run as administrator."
|
||||
Break
|
||||
}
|
||||
if (!$env:PRUNSRV)
|
||||
{
|
||||
$env:PRUNSRV="$PATH_PRUNSRV\prunsrv"
|
||||
}
|
||||
|
||||
$regPath = "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\"
|
||||
|
||||
echo "Attempting to delete existing $SERVICE_JVM service..."
|
||||
Start-Sleep -s 2
|
||||
$proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList "//DS//$SERVICE_JVM" -PassThru -WindowStyle Hidden
|
||||
|
||||
echo "Reverting to default TCP keepalive settings (2 hour timeout)"
|
||||
Remove-ItemProperty -Path $regPath -Name KeepAliveTime -EA SilentlyContinue
|
||||
|
||||
# Quit out if this is uninstall only
|
||||
if ($uninstall)
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
echo "Installing [$SERVICE_JVM]."
|
||||
Start-Sleep -s 2
|
||||
$proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList "//IS//$SERVICE_JVM" -PassThru -WindowStyle Hidden
|
||||
|
||||
echo "Setting launch parameters for [$SERVICE_JVM]"
|
||||
Start-Sleep -s 2
|
||||
|
||||
# Change delim from " -" to ";-" in JVM_OPTS for prunsrv
|
||||
$env:JVM_OPTS = $env:JVM_OPTS -replace " -", ";-"
|
||||
$env:JVM_OPTS = $env:JVM_OPTS -replace " -", ";-"
|
||||
|
||||
# Strip off leading ; if it's there
|
||||
$env:JVM_OPTS = $env:JVM_OPTS.TrimStart(";")
|
||||
|
||||
# Broken multi-line for convenience - glued back together in a bit
|
||||
$args = @"
|
||||
//US//$SERVICE_JVM
|
||||
--Jvm=auto --StdOutput auto --StdError auto
|
||||
--Classpath=$env:CLASSPATH
|
||||
--StartMode=jvm --StartClass=$env:CASSANDRA_MAIN --StartMethod=main
|
||||
--StopMode=jvm --StopClass=$env:CASSANDRA_MAIN --StopMethod=stop
|
||||
++JvmOptions=$env:JVM_OPTS ++JvmOptions=-DCassandra
|
||||
--PidFile "$pidfile"
|
||||
"@
|
||||
$args = $args -replace [Environment]::NewLine, ""
|
||||
$proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList $args -PassThru -WindowStyle Hidden
|
||||
|
||||
echo "Setting KeepAliveTimer to 5 minutes for TCP keepalive"
|
||||
Set-ItemProperty -Path $regPath -Name KeepAliveTime -Value 300000
|
||||
|
||||
echo "Installation of [$SERVICE_JVM] is complete"
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function RunCassandra([string]$foreground)
|
||||
{
|
||||
echo "Starting cassandra server"
|
||||
$cmd = @"
|
||||
$env:JAVA_BIN
|
||||
"@
|
||||
$arg1 = $env:JVM_OPTS
|
||||
$arg2 = $env:CASSANDRA_PARAMS
|
||||
$arg3 = "-cp $env:CLASSPATH"
|
||||
$arg4 = @"
|
||||
"$env:CASSANDRA_MAIN"
|
||||
"@
|
||||
|
||||
$proc = $null
|
||||
|
||||
if ($verbose)
|
||||
{
|
||||
echo "Running cassandra with: [$cmd $arg1 $arg2 $arg3 $arg4]"
|
||||
}
|
||||
|
||||
if ($foreground -ne "False")
|
||||
{
|
||||
$cygwin = $false
|
||||
try
|
||||
{
|
||||
$uname = uname -o
|
||||
$cygwin = $true
|
||||
}
|
||||
catch
|
||||
{
|
||||
# Failed at uname call, not in cygwin
|
||||
}
|
||||
|
||||
if ($cygwin)
|
||||
{
|
||||
# if running on cygwin, we cannot capture ctrl+c signals as mintty traps them and then
|
||||
# SIGKILLs processes, so we'll need to record our $pidfile file for future
|
||||
# stop-server usage
|
||||
if (!$p)
|
||||
{
|
||||
$arg2 = $arg2 + " -Dcassandra-pidfile=$pidfile"
|
||||
}
|
||||
}
|
||||
|
||||
$arg2 = $arg2 + " -Dcassandra-foreground=yes"
|
||||
|
||||
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
|
||||
$pinfo.FileName = "$env:JAVA_BIN"
|
||||
$pinfo.RedirectStandardInput = $true
|
||||
$pinfo.UseShellExecute = $false
|
||||
$pinfo.Arguments = $arg1,$arg2,$arg3,$arg4
|
||||
$p = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo = $pinfo
|
||||
$p.Start() | Out-Null
|
||||
echo $p.Id > $pidfile
|
||||
$p.WaitForExit()
|
||||
}
|
||||
else
|
||||
{
|
||||
$proc = Start-Process -FilePath "$cmd" -ArgumentList $arg1,$arg2,$arg3,$arg4 -PassThru -WindowStyle Hidden
|
||||
|
||||
$exitCode = $?
|
||||
|
||||
try
|
||||
{
|
||||
echo $proc.Id > $pidfile
|
||||
}
|
||||
catch
|
||||
{
|
||||
echo @"
|
||||
WARNING! Failed to write pidfile to $pidfile. stop-server.bat and
|
||||
startup protection will not be available.
|
||||
"@
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-Not $exitCode)
|
||||
{
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Main
|
||||
|
|
|
@ -1,57 +1,57 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
Function Find-Conf
|
||||
{
|
||||
$file = "";
|
||||
# Order of preference on grabbing environment settings:
|
||||
# 1: %CASSANDRA_INCLUDE%
|
||||
# 2a: %USERPROFILE%/cassandra-env.ps1 (cmd-prompt)
|
||||
# 2b: $HOME/cassandra-env.ps1 (cygwin)
|
||||
# 3: %CASSANDRA_HOME%/conf/cassandra-env.ps1
|
||||
# 4: Relative to current working directory (../conf)
|
||||
if (Test-Path Env:\CASSANDRA_INCLUDE)
|
||||
{
|
||||
$file = "$env:CASSANDRA_INCLUDE"
|
||||
}
|
||||
elseif (Test-Path "$env:USERPROFILE/cassandra-env.ps1")
|
||||
{
|
||||
$file = "$env:USERPROFILE/cassandra-env.ps1"
|
||||
}
|
||||
elseif (Test-Path "$env:HOME/cassandra-env.ps1")
|
||||
{
|
||||
$file = "$env:HOME/cassandra-env.ps1"
|
||||
}
|
||||
elseif (Test-Path Env:\CASSANDRA_HOME)
|
||||
{
|
||||
$file = "$env:CASSANDRA_HOME/conf/cassandra-env.ps1"
|
||||
}
|
||||
else
|
||||
{
|
||||
$file = [System.IO.Directory]::GetCurrentDirectory() + "/../conf/cassandra-env.ps1"
|
||||
}
|
||||
$file = $file -replace "\\", "/"
|
||||
|
||||
if (Test-Path $file)
|
||||
{
|
||||
return $file
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "Error with environment file resolution. Path: [$file] not found."
|
||||
exit
|
||||
}
|
||||
}
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
Function Find-Conf
|
||||
{
|
||||
$file = "";
|
||||
# Order of preference on grabbing environment settings:
|
||||
# 1: %CASSANDRA_INCLUDE%
|
||||
# 2a: %USERPROFILE%/cassandra-env.ps1 (cmd-prompt)
|
||||
# 2b: $HOME/cassandra-env.ps1 (cygwin)
|
||||
# 3: %CASSANDRA_HOME%/conf/cassandra-env.ps1
|
||||
# 4: Relative to current working directory (../conf)
|
||||
if (Test-Path Env:\CASSANDRA_INCLUDE)
|
||||
{
|
||||
$file = "$env:CASSANDRA_INCLUDE"
|
||||
}
|
||||
elseif (Test-Path "$env:USERPROFILE/cassandra-env.ps1")
|
||||
{
|
||||
$file = "$env:USERPROFILE/cassandra-env.ps1"
|
||||
}
|
||||
elseif (Test-Path "$env:HOME/cassandra-env.ps1")
|
||||
{
|
||||
$file = "$env:HOME/cassandra-env.ps1"
|
||||
}
|
||||
elseif (Test-Path Env:\CASSANDRA_HOME)
|
||||
{
|
||||
$file = "$env:CASSANDRA_HOME/conf/cassandra-env.ps1"
|
||||
}
|
||||
else
|
||||
{
|
||||
$file = [System.IO.Directory]::GetCurrentDirectory() + "/../conf/cassandra-env.ps1"
|
||||
}
|
||||
$file = $file -replace "\\", "/"
|
||||
|
||||
if (Test-Path $file)
|
||||
{
|
||||
return $file
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "Error with environment file resolution. Path: [$file] not found."
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,178 +1,178 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
param (
|
||||
[string]$p,
|
||||
[string]$batchpid,
|
||||
[switch]$f,
|
||||
[switch]$silent,
|
||||
[switch]$help
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function ValidateArguments
|
||||
{
|
||||
if (!$p)
|
||||
{
|
||||
PrintUsage
|
||||
}
|
||||
if ($help)
|
||||
{
|
||||
PrintUsage
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function PrintUsage
|
||||
{
|
||||
echo @"
|
||||
|
||||
usage: stop-server.ps1 -p pidfile -f[-help]
|
||||
-p pidfile tracked by server and removed on close.
|
||||
-s Silent. Don't print success/failure data.
|
||||
-f force kill.
|
||||
"@
|
||||
exit
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function KillProcess
|
||||
{
|
||||
if (-Not (Test-Path $p))
|
||||
{
|
||||
if (-Not ($silent))
|
||||
{
|
||||
echo "Error - pidfile not found. Aborting."
|
||||
}
|
||||
exit
|
||||
}
|
||||
|
||||
$t = @"
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
|
||||
namespace PowerStopper
|
||||
{
|
||||
public static class Stopper
|
||||
{
|
||||
delegate bool ConsoleCtrlDelegate(CtrlTypes CtrlType);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool AttachConsole(uint dwProcessId);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
|
||||
static extern bool FreeConsole();
|
||||
|
||||
enum CtrlTypes : uint
|
||||
{
|
||||
CTRL_C_EVENT = 0,
|
||||
CTRL_BREAK_EVENT,
|
||||
CTRL_CLOSE_EVENT,
|
||||
CTRL_LOGOFF_EVENT = 5,
|
||||
CTRL_SHUTDOWN_EVENT
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool GenerateConsoleCtrlEvent(CtrlTypes dwCtrlEvent, uint dwProcessGroupId);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
|
||||
|
||||
// Our output gets swallowed on ms-dos as we can't re-attach our console to the output of the cmd
|
||||
// running the batch file.
|
||||
public static void StopProgram(int pidToKill, int consolePid, bool silent)
|
||||
{
|
||||
Process proc = null;
|
||||
try
|
||||
{
|
||||
proc = Process.GetProcessById(pidToKill);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
if (!silent)
|
||||
System.Console.WriteLine("Process " + pidToKill + " not found. Aborting.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!FreeConsole())
|
||||
{
|
||||
if (!silent)
|
||||
System.Console.WriteLine("Failed to FreeConsole to attach to running cassandra process. Aborting.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (AttachConsole((uint)pidToKill))
|
||||
{
|
||||
//Disable Ctrl-C handling for our program
|
||||
SetConsoleCtrlHandler(null, true);
|
||||
GenerateConsoleCtrlEvent(CtrlTypes.CTRL_C_EVENT, 0);
|
||||
|
||||
// Must wait here. If we don't and re-enable Ctrl-C
|
||||
// handling below too fast, we might terminate ourselves.
|
||||
proc.WaitForExit(2000);
|
||||
FreeConsole();
|
||||
|
||||
// Re-attach to current console to write output
|
||||
if (consolePid >= 0)
|
||||
AttachConsole((uint)consolePid);
|
||||
|
||||
// Re-enable Ctrl-C handling or any subsequently started
|
||||
// programs will inherit the disabled state.
|
||||
SetConsoleCtrlHandler(null, false);
|
||||
|
||||
if (!silent)
|
||||
System.Console.WriteLine("Successfully sent ctrl+c to process with id: " + pidToKill + ".");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!silent)
|
||||
{
|
||||
string errorMsg = new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()).Message;
|
||||
System.Console.WriteLine("Error attaching to pid: " + pidToKill + ": " + Marshal.GetLastWin32Error() + " - " + errorMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"@
|
||||
# cygwin assumes environment variables are case sensitive which causes problems when
|
||||
# the type dictionary references 'tmp' or 'temp' and throws a System.ArgumentException
|
||||
$oldTmp = $env:TMP
|
||||
$oldTemp = $env:Temp
|
||||
$env:TMP=''
|
||||
$env:TEMP=''
|
||||
Add-Type -TypeDefinition $t
|
||||
$env:TMP = $oldTmp
|
||||
$env:TEMP = $oldTemp
|
||||
|
||||
$a = Get-Content $p
|
||||
# If run in cygwin, we don't get the TITLE / pid combo in stop-server.bat but also don't need
|
||||
# to worry about reattaching console output as it gets stderr/stdout even after the C#/C++
|
||||
# FreeConsole calls.
|
||||
if ($batchpid -eq "No")
|
||||
{
|
||||
$batchpid = -1
|
||||
}
|
||||
|
||||
[PowerStopper.Stopper]::StopProgram($a, $batchpid, $silent)
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
ValidateArguments
|
||||
KillProcess
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
param (
|
||||
[string]$p,
|
||||
[string]$batchpid,
|
||||
[switch]$f,
|
||||
[switch]$silent,
|
||||
[switch]$help
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function ValidateArguments
|
||||
{
|
||||
if (!$p)
|
||||
{
|
||||
PrintUsage
|
||||
}
|
||||
if ($help)
|
||||
{
|
||||
PrintUsage
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function PrintUsage
|
||||
{
|
||||
echo @"
|
||||
|
||||
usage: stop-server.ps1 -p pidfile -f[-help]
|
||||
-p pidfile tracked by server and removed on close.
|
||||
-s Silent. Don't print success/failure data.
|
||||
-f force kill.
|
||||
"@
|
||||
exit
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function KillProcess
|
||||
{
|
||||
if (-Not (Test-Path $p))
|
||||
{
|
||||
if (-Not ($silent))
|
||||
{
|
||||
echo "Error - pidfile not found. Aborting."
|
||||
}
|
||||
exit
|
||||
}
|
||||
|
||||
$t = @"
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
|
||||
namespace PowerStopper
|
||||
{
|
||||
public static class Stopper
|
||||
{
|
||||
delegate bool ConsoleCtrlDelegate(CtrlTypes CtrlType);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool AttachConsole(uint dwProcessId);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
|
||||
static extern bool FreeConsole();
|
||||
|
||||
enum CtrlTypes : uint
|
||||
{
|
||||
CTRL_C_EVENT = 0,
|
||||
CTRL_BREAK_EVENT,
|
||||
CTRL_CLOSE_EVENT,
|
||||
CTRL_LOGOFF_EVENT = 5,
|
||||
CTRL_SHUTDOWN_EVENT
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool GenerateConsoleCtrlEvent(CtrlTypes dwCtrlEvent, uint dwProcessGroupId);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
|
||||
|
||||
// Our output gets swallowed on ms-dos as we can't re-attach our console to the output of the cmd
|
||||
// running the batch file.
|
||||
public static void StopProgram(int pidToKill, int consolePid, bool silent)
|
||||
{
|
||||
Process proc = null;
|
||||
try
|
||||
{
|
||||
proc = Process.GetProcessById(pidToKill);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
if (!silent)
|
||||
System.Console.WriteLine("Process " + pidToKill + " not found. Aborting.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!FreeConsole())
|
||||
{
|
||||
if (!silent)
|
||||
System.Console.WriteLine("Failed to FreeConsole to attach to running cassandra process. Aborting.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (AttachConsole((uint)pidToKill))
|
||||
{
|
||||
//Disable Ctrl-C handling for our program
|
||||
SetConsoleCtrlHandler(null, true);
|
||||
GenerateConsoleCtrlEvent(CtrlTypes.CTRL_C_EVENT, 0);
|
||||
|
||||
// Must wait here. If we don't and re-enable Ctrl-C
|
||||
// handling below too fast, we might terminate ourselves.
|
||||
proc.WaitForExit(2000);
|
||||
FreeConsole();
|
||||
|
||||
// Re-attach to current console to write output
|
||||
if (consolePid >= 0)
|
||||
AttachConsole((uint)consolePid);
|
||||
|
||||
// Re-enable Ctrl-C handling or any subsequently started
|
||||
// programs will inherit the disabled state.
|
||||
SetConsoleCtrlHandler(null, false);
|
||||
|
||||
if (!silent)
|
||||
System.Console.WriteLine("Successfully sent ctrl+c to process with id: " + pidToKill + ".");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!silent)
|
||||
{
|
||||
string errorMsg = new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()).Message;
|
||||
System.Console.WriteLine("Error attaching to pid: " + pidToKill + ": " + Marshal.GetLastWin32Error() + " - " + errorMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"@
|
||||
# cygwin assumes environment variables are case sensitive which causes problems when
|
||||
# the type dictionary references 'tmp' or 'temp' and throws a System.ArgumentException
|
||||
$oldTmp = $env:TMP
|
||||
$oldTemp = $env:Temp
|
||||
$env:TMP=''
|
||||
$env:TEMP=''
|
||||
Add-Type -TypeDefinition $t
|
||||
$env:TMP = $oldTmp
|
||||
$env:TEMP = $oldTemp
|
||||
|
||||
$a = Get-Content $p
|
||||
# If run in cygwin, we don't get the TITLE / pid combo in stop-server.bat but also don't need
|
||||
# to worry about reattaching console output as it gets stderr/stdout even after the C#/C++
|
||||
# FreeConsole calls.
|
||||
if ($batchpid -eq "No")
|
||||
{
|
||||
$batchpid = -1
|
||||
}
|
||||
|
||||
[PowerStopper.Stopper]::StopProgram($a, $batchpid, $silent)
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
ValidateArguments
|
||||
KillProcess
|
||||
|
|
|
@ -1,324 +1,324 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# NOTE: All param tuning can be done in the SetCassandraEnvironment Function below
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function SetCassandraHome()
|
||||
{
|
||||
if (! $env:CASSANDRA_HOME)
|
||||
{
|
||||
$cwd = [System.IO.Directory]::GetCurrentDirectory()
|
||||
$cwd = Split-Path $cwd -parent
|
||||
$env:CASSANDRA_HOME = $cwd -replace "\\", "/"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function SetCassandraMain()
|
||||
{
|
||||
if (! $env:CASSANDRA_MAIN)
|
||||
{
|
||||
$env:CASSANDRA_MAIN="org.apache.cassandra.service.CassandraDaemon"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function BuildClassPath
|
||||
{
|
||||
$cp = """$env:CASSANDRA_HOME\conf"""
|
||||
foreach ($file in Get-ChildItem "$env:CASSANDRA_HOME\lib\*.jar")
|
||||
{
|
||||
$file = $file -replace "\\", "/"
|
||||
$cp = $cp + ";" + """$file"""
|
||||
}
|
||||
|
||||
# Add build/classes/main so it works in development
|
||||
$cp = $cp + ";" + """$env:CASSANDRA_HOME\build\classes\main"";""$env:CASSANDRA_HOME\build\classes\thrift"""
|
||||
$env:CLASSPATH=$cp
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function CalculateHeapSizes
|
||||
{
|
||||
# Validate that we need to run this function and that our config is good
|
||||
if ($env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE)
|
||||
{
|
||||
return
|
||||
}
|
||||
if (($env:MAX_HEAP_SIZE -and !$env:HEAP_NEWSIZE) -or (!$env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE))
|
||||
{
|
||||
echo "please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$memObject = Get-WMIObject -class win32_physicalmemory
|
||||
if ($memObject -eq $null)
|
||||
{
|
||||
echo "WARNING! Could not determine system memory. Defaulting to 2G heap, 512M newgen. Manually override in conf/cassandra-env.ps1 for different heap values."
|
||||
$env:MAX_HEAP_SIZE = "2048M"
|
||||
$env:HEAP_NEWSIZE = "512M"
|
||||
return
|
||||
}
|
||||
|
||||
$memory = ($memObject | Measure-Object Capacity -Sum).sum
|
||||
$memoryMB = [Math]::Truncate($memory / (1024*1024))
|
||||
|
||||
$cpu = gwmi Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors
|
||||
$systemCores = $cpu.NumberOfLogicalProcessors
|
||||
|
||||
# set max heap size based on the following
|
||||
# max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
|
||||
# calculate 1/2 ram and cap to 1024MB
|
||||
# calculate 1/4 ram and cap to 8192MB
|
||||
# pick the max
|
||||
$halfMem = [Math]::Truncate($memoryMB / 2)
|
||||
$quarterMem = [Math]::Truncate($halfMem / 2)
|
||||
|
||||
if ($halfMem -gt 1024)
|
||||
{
|
||||
$halfMem = 1024
|
||||
}
|
||||
if ($quarterMem -gt 8192)
|
||||
{
|
||||
$quarterMem = 8192
|
||||
}
|
||||
|
||||
$maxHeapMB = ""
|
||||
if ($halfMem -gt $quarterMem)
|
||||
{
|
||||
$maxHeapMB = $halfMem
|
||||
}
|
||||
else
|
||||
{
|
||||
$maxHeapMB = $quarterMem
|
||||
}
|
||||
$env:MAX_HEAP_SIZE = [System.Convert]::ToString($maxHeapMB) + "M"
|
||||
|
||||
# Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4
|
||||
$maxYGPerCore = 100
|
||||
$maxYGTotal = $maxYGPerCore * $systemCores
|
||||
$desiredYG = [Math]::Truncate($maxHeapMB / 4)
|
||||
|
||||
if ($desiredYG -gt $maxYGTotal)
|
||||
{
|
||||
$env:HEAP_NEWSIZE = [System.Convert]::ToString($maxYGTotal) + "M"
|
||||
}
|
||||
else
|
||||
{
|
||||
$env:HEAP_NEWSIZE = [System.Convert]::ToString($desiredYG) + "M"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function ParseJVMInfo
|
||||
{
|
||||
# grab info about the JVM
|
||||
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
|
||||
$pinfo.FileName = "$env:JAVA_BIN"
|
||||
$pinfo.RedirectStandardError = $true
|
||||
$pinfo.RedirectStandardOutput = $true
|
||||
$pinfo.UseShellExecute = $false
|
||||
$pinfo.Arguments = "-version"
|
||||
$p = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo = $pinfo
|
||||
$p.Start() | Out-Null
|
||||
$p.WaitForExit()
|
||||
$stderr = $p.StandardError.ReadToEnd()
|
||||
|
||||
$sa = $stderr.Split("""")
|
||||
$env:JVM_VERSION = $sa[1]
|
||||
|
||||
if ($stderr.Contains("OpenJDK"))
|
||||
{
|
||||
$env:JVM_VENDOR = "OpenJDK"
|
||||
}
|
||||
elseif ($stderr.Contains("Java(TM)"))
|
||||
{
|
||||
$env:JVM_VENDOR = "Oracle"
|
||||
}
|
||||
else
|
||||
{
|
||||
$JVM_VENDOR = "other"
|
||||
}
|
||||
|
||||
$pa = $sa[1].Split("_")
|
||||
$env:JVM_PATCH_VERSION=$pa[1]
|
||||
|
||||
# get 64-bit vs. 32-bit
|
||||
$pinfo.Arguments = "-d64 -version"
|
||||
$pArch = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo = $pinfo
|
||||
$p.Start() | Out-Null
|
||||
$p.WaitForExit()
|
||||
$stderr = $p.StandardError.ReadToEnd()
|
||||
|
||||
if ($stderr.Contains("Error"))
|
||||
{
|
||||
$env:JVM_ARCH = "32-bit"
|
||||
}
|
||||
else
|
||||
{
|
||||
$env:JVM_ARCH = "64-bit"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function SetCassandraEnvironment
|
||||
{
|
||||
echo "Setting up Cassandra environment"
|
||||
if (Test-Path Env:\JAVA_HOME)
|
||||
{
|
||||
$env:JAVA_BIN = "$env:JAVA_HOME\bin\java.exe"
|
||||
}
|
||||
elseif (Get-Command "java.exe")
|
||||
{
|
||||
$env:JAVA_BIN = "java.exe"
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "ERROR! No JAVA_HOME set and could not find java.exe in the path."
|
||||
exit
|
||||
}
|
||||
SetCassandraHome
|
||||
$env:CASSANDRA_CONF = "$env:CASSANDRA_HOME\conf"
|
||||
$env:CASSANDRA_PARAMS="-Dcassandra -Dlogback.configurationFile=logback.xml"
|
||||
SetCassandraMain
|
||||
BuildClassPath
|
||||
|
||||
# Override these to set the amount of memory to allocate to the JVM at
|
||||
# start-up. For production use you may wish to adjust this for your
|
||||
# environment. MAX_HEAP_SIZE is the total amount of memory dedicated
|
||||
# to the Java heap; HEAP_NEWSIZE refers to the size of the young
|
||||
# generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should be either set
|
||||
# or not (if you set one, set the other).
|
||||
#
|
||||
# The main trade-off for the young generation is that the larger it
|
||||
# is, the longer GC pause times will be. The shorter it is, the more
|
||||
# expensive GC will be (usually).
|
||||
#
|
||||
# The example HEAP_NEWSIZE assumes a modern 8-core+ machine for decent
|
||||
# times. If in doubt, and if you do not particularly want to tweak, go
|
||||
# 100 MB per physical CPU core.
|
||||
|
||||
#$env:MAX_HEAP_SIZE="4096M"
|
||||
#$env:HEAP_NEWSIZE="800M"
|
||||
CalculateHeapSizes
|
||||
|
||||
ParseJVMInfo
|
||||
# add the jamm javaagent
|
||||
if (($env:JVM_VENDOR -ne "OpenJDK") -or ($env:JVM_VERSION.CompareTo("1.6.0") -eq 1) -or
|
||||
(($env:JVM_VERSION -eq "1.6.0") -and ($env:JVM_PATCH_VERSION.CompareTo("22") -eq 1)))
|
||||
{
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -javaagent:""$env:CASSANDRA_HOME\lib\jamm-0.2.6.jar"""
|
||||
}
|
||||
|
||||
# enable assertions. disabling this in production will give a modest
|
||||
# performance benefit (around 5%).
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -ea"
|
||||
|
||||
# Specifies the default port over which Cassandra will be available for
|
||||
# JMX connections.
|
||||
$JMX_PORT="7199"
|
||||
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -Dlog4j.defaultInitOverride=true"
|
||||
|
||||
# some JVMs will fill up their heap when accessed via JMX, see CASSANDRA-6541
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+CMSClassUnloadingEnabled"
|
||||
|
||||
# enable thread priorities, primarily so we can give periodic tasks
|
||||
# a lower priority to avoid interfering with client workload
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseThreadPriorities"
|
||||
# allows lowering thread priority without being root. see
|
||||
# http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workar
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:ThreadPriorityPolicy=42"
|
||||
|
||||
# min and max heap sizes should be set to the same value to avoid
|
||||
# stop-the-world GC pauses during resize, and so that we can lock the
|
||||
# heap in memory on startup to prevent any of it from being swapped
|
||||
# out.
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xms$env:MAX_HEAP_SIZE"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xmx$env:MAX_HEAP_SIZE"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xmn$env:HEAP_NEWSIZE"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError"
|
||||
|
||||
# Per-thread stack size.
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xss256k"
|
||||
|
||||
# Larger interned string table, for gossip's benefit (CASSANDRA-6410)
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:StringTableSize=1000003"
|
||||
|
||||
# GC tuning options
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseParNewGC"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseConcMarkSweepGC"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+CMSParallelRemarkEnabled"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:SurvivorRatio=8"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:MaxTenuringThreshold=1"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:CMSInitiatingOccupancyFraction=75"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseTLAB"
|
||||
if (($env:JVM_VERSION.CompareTo("1.7") -eq 1) -and ($env:JVM_ARCH -eq "64-Bit"))
|
||||
{
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseCondCardMark"
|
||||
}
|
||||
|
||||
# GC logging options -- uncomment to enable
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCDetails"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCDateStamps"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintHeapAtGC"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintTenuringDistribution"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCApplicationStoppedTime"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintPromotionFailure"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:PrintFLSStatistics=1"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
|
||||
|
||||
# If you are using JDK 6u34 7u2 or later you can enable GC log rotation
|
||||
# don't stick the date in the log name if rotation is on.
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+UseGCLogFileRotation"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:NumberOfGCLogFiles=10"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:GCLogFileSize=10M"
|
||||
|
||||
# Configure the following for JEMallocAllocator and if jemalloc is not available in the system
|
||||
# library path (Example: /usr/local/lib/). Usually "make install" will do the right thing.
|
||||
# set LD_LIBRARY_PATH=<JEMALLOC_HOME>/lib/
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Djava.library.path=<JEMALLOC_HOME>/lib/"
|
||||
|
||||
# uncomment to have Cassandra JVM listen for remote debuggers/profilers on port 1414
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414"
|
||||
|
||||
# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See
|
||||
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version:
|
||||
# comment out this entry to enable IPv6 support).
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Djava.net.preferIPv4Stack=true"
|
||||
|
||||
# jmx: metrics and administration interface
|
||||
#
|
||||
# add this if you're having trouble connecting:
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Djava.rmi.server.hostname=<public name>"
|
||||
#
|
||||
# see
|
||||
# https://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole
|
||||
# for more on configuring JMX through firewalls, etc. (Short version:
|
||||
# get it working with no firewall first.)
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
|
||||
#$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS $JVM_EXTRA_OPTS"
|
||||
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -Dlog4j.configuration=log4j-server.properties"
|
||||
}
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# NOTE: All param tuning can be done in the SetCassandraEnvironment Function below
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function SetCassandraHome()
|
||||
{
|
||||
if (! $env:CASSANDRA_HOME)
|
||||
{
|
||||
$cwd = [System.IO.Directory]::GetCurrentDirectory()
|
||||
$cwd = Split-Path $cwd -parent
|
||||
$env:CASSANDRA_HOME = $cwd -replace "\\", "/"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function SetCassandraMain()
|
||||
{
|
||||
if (! $env:CASSANDRA_MAIN)
|
||||
{
|
||||
$env:CASSANDRA_MAIN="org.apache.cassandra.service.CassandraDaemon"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function BuildClassPath
|
||||
{
|
||||
$cp = """$env:CASSANDRA_HOME\conf"""
|
||||
foreach ($file in Get-ChildItem "$env:CASSANDRA_HOME\lib\*.jar")
|
||||
{
|
||||
$file = $file -replace "\\", "/"
|
||||
$cp = $cp + ";" + """$file"""
|
||||
}
|
||||
|
||||
# Add build/classes/main so it works in development
|
||||
$cp = $cp + ";" + """$env:CASSANDRA_HOME\build\classes\main"";""$env:CASSANDRA_HOME\build\classes\thrift"""
|
||||
$env:CLASSPATH=$cp
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function CalculateHeapSizes
|
||||
{
|
||||
# Validate that we need to run this function and that our config is good
|
||||
if ($env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE)
|
||||
{
|
||||
return
|
||||
}
|
||||
if (($env:MAX_HEAP_SIZE -and !$env:HEAP_NEWSIZE) -or (!$env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE))
|
||||
{
|
||||
echo "please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$memObject = Get-WMIObject -class win32_physicalmemory
|
||||
if ($memObject -eq $null)
|
||||
{
|
||||
echo "WARNING! Could not determine system memory. Defaulting to 2G heap, 512M newgen. Manually override in conf/cassandra-env.ps1 for different heap values."
|
||||
$env:MAX_HEAP_SIZE = "2048M"
|
||||
$env:HEAP_NEWSIZE = "512M"
|
||||
return
|
||||
}
|
||||
|
||||
$memory = ($memObject | Measure-Object Capacity -Sum).sum
|
||||
$memoryMB = [Math]::Truncate($memory / (1024*1024))
|
||||
|
||||
$cpu = gwmi Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors
|
||||
$systemCores = $cpu.NumberOfLogicalProcessors
|
||||
|
||||
# set max heap size based on the following
|
||||
# max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
|
||||
# calculate 1/2 ram and cap to 1024MB
|
||||
# calculate 1/4 ram and cap to 8192MB
|
||||
# pick the max
|
||||
$halfMem = [Math]::Truncate($memoryMB / 2)
|
||||
$quarterMem = [Math]::Truncate($halfMem / 2)
|
||||
|
||||
if ($halfMem -gt 1024)
|
||||
{
|
||||
$halfMem = 1024
|
||||
}
|
||||
if ($quarterMem -gt 8192)
|
||||
{
|
||||
$quarterMem = 8192
|
||||
}
|
||||
|
||||
$maxHeapMB = ""
|
||||
if ($halfMem -gt $quarterMem)
|
||||
{
|
||||
$maxHeapMB = $halfMem
|
||||
}
|
||||
else
|
||||
{
|
||||
$maxHeapMB = $quarterMem
|
||||
}
|
||||
$env:MAX_HEAP_SIZE = [System.Convert]::ToString($maxHeapMB) + "M"
|
||||
|
||||
# Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4
|
||||
$maxYGPerCore = 100
|
||||
$maxYGTotal = $maxYGPerCore * $systemCores
|
||||
$desiredYG = [Math]::Truncate($maxHeapMB / 4)
|
||||
|
||||
if ($desiredYG -gt $maxYGTotal)
|
||||
{
|
||||
$env:HEAP_NEWSIZE = [System.Convert]::ToString($maxYGTotal) + "M"
|
||||
}
|
||||
else
|
||||
{
|
||||
$env:HEAP_NEWSIZE = [System.Convert]::ToString($desiredYG) + "M"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function ParseJVMInfo
|
||||
{
|
||||
# grab info about the JVM
|
||||
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
|
||||
$pinfo.FileName = "$env:JAVA_BIN"
|
||||
$pinfo.RedirectStandardError = $true
|
||||
$pinfo.RedirectStandardOutput = $true
|
||||
$pinfo.UseShellExecute = $false
|
||||
$pinfo.Arguments = "-version"
|
||||
$p = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo = $pinfo
|
||||
$p.Start() | Out-Null
|
||||
$p.WaitForExit()
|
||||
$stderr = $p.StandardError.ReadToEnd()
|
||||
|
||||
$sa = $stderr.Split("""")
|
||||
$env:JVM_VERSION = $sa[1]
|
||||
|
||||
if ($stderr.Contains("OpenJDK"))
|
||||
{
|
||||
$env:JVM_VENDOR = "OpenJDK"
|
||||
}
|
||||
elseif ($stderr.Contains("Java(TM)"))
|
||||
{
|
||||
$env:JVM_VENDOR = "Oracle"
|
||||
}
|
||||
else
|
||||
{
|
||||
$JVM_VENDOR = "other"
|
||||
}
|
||||
|
||||
$pa = $sa[1].Split("_")
|
||||
$env:JVM_PATCH_VERSION=$pa[1]
|
||||
|
||||
# get 64-bit vs. 32-bit
|
||||
$pinfo.Arguments = "-d64 -version"
|
||||
$pArch = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo = $pinfo
|
||||
$p.Start() | Out-Null
|
||||
$p.WaitForExit()
|
||||
$stderr = $p.StandardError.ReadToEnd()
|
||||
|
||||
if ($stderr.Contains("Error"))
|
||||
{
|
||||
$env:JVM_ARCH = "32-bit"
|
||||
}
|
||||
else
|
||||
{
|
||||
$env:JVM_ARCH = "64-bit"
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
Function SetCassandraEnvironment
|
||||
{
|
||||
echo "Setting up Cassandra environment"
|
||||
if (Test-Path Env:\JAVA_HOME)
|
||||
{
|
||||
$env:JAVA_BIN = "$env:JAVA_HOME\bin\java.exe"
|
||||
}
|
||||
elseif (Get-Command "java.exe")
|
||||
{
|
||||
$env:JAVA_BIN = "java.exe"
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "ERROR! No JAVA_HOME set and could not find java.exe in the path."
|
||||
exit
|
||||
}
|
||||
SetCassandraHome
|
||||
$env:CASSANDRA_CONF = "$env:CASSANDRA_HOME\conf"
|
||||
$env:CASSANDRA_PARAMS="-Dcassandra -Dlogback.configurationFile=logback.xml"
|
||||
SetCassandraMain
|
||||
BuildClassPath
|
||||
|
||||
# Override these to set the amount of memory to allocate to the JVM at
|
||||
# start-up. For production use you may wish to adjust this for your
|
||||
# environment. MAX_HEAP_SIZE is the total amount of memory dedicated
|
||||
# to the Java heap; HEAP_NEWSIZE refers to the size of the young
|
||||
# generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should be either set
|
||||
# or not (if you set one, set the other).
|
||||
#
|
||||
# The main trade-off for the young generation is that the larger it
|
||||
# is, the longer GC pause times will be. The shorter it is, the more
|
||||
# expensive GC will be (usually).
|
||||
#
|
||||
# The example HEAP_NEWSIZE assumes a modern 8-core+ machine for decent
|
||||
# times. If in doubt, and if you do not particularly want to tweak, go
|
||||
# 100 MB per physical CPU core.
|
||||
|
||||
#$env:MAX_HEAP_SIZE="4096M"
|
||||
#$env:HEAP_NEWSIZE="800M"
|
||||
CalculateHeapSizes
|
||||
|
||||
ParseJVMInfo
|
||||
# add the jamm javaagent
|
||||
if (($env:JVM_VENDOR -ne "OpenJDK") -or ($env:JVM_VERSION.CompareTo("1.6.0") -eq 1) -or
|
||||
(($env:JVM_VERSION -eq "1.6.0") -and ($env:JVM_PATCH_VERSION.CompareTo("22") -eq 1)))
|
||||
{
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -javaagent:""$env:CASSANDRA_HOME\lib\jamm-0.2.6.jar"""
|
||||
}
|
||||
|
||||
# enable assertions. disabling this in production will give a modest
|
||||
# performance benefit (around 5%).
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -ea"
|
||||
|
||||
# Specifies the default port over which Cassandra will be available for
|
||||
# JMX connections.
|
||||
$JMX_PORT="7199"
|
||||
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -Dlog4j.defaultInitOverride=true"
|
||||
|
||||
# some JVMs will fill up their heap when accessed via JMX, see CASSANDRA-6541
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+CMSClassUnloadingEnabled"
|
||||
|
||||
# enable thread priorities, primarily so we can give periodic tasks
|
||||
# a lower priority to avoid interfering with client workload
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseThreadPriorities"
|
||||
# allows lowering thread priority without being root. see
|
||||
# http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workar
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:ThreadPriorityPolicy=42"
|
||||
|
||||
# min and max heap sizes should be set to the same value to avoid
|
||||
# stop-the-world GC pauses during resize, and so that we can lock the
|
||||
# heap in memory on startup to prevent any of it from being swapped
|
||||
# out.
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xms$env:MAX_HEAP_SIZE"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xmx$env:MAX_HEAP_SIZE"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xmn$env:HEAP_NEWSIZE"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError"
|
||||
|
||||
# Per-thread stack size.
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Xss256k"
|
||||
|
||||
# Larger interned string table, for gossip's benefit (CASSANDRA-6410)
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:StringTableSize=1000003"
|
||||
|
||||
# GC tuning options
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseParNewGC"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseConcMarkSweepGC"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+CMSParallelRemarkEnabled"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:SurvivorRatio=8"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:MaxTenuringThreshold=1"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:CMSInitiatingOccupancyFraction=75"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseTLAB"
|
||||
if (($env:JVM_VERSION.CompareTo("1.7") -eq 1) -and ($env:JVM_ARCH -eq "64-Bit"))
|
||||
{
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -XX:+UseCondCardMark"
|
||||
}
|
||||
|
||||
# GC logging options -- uncomment to enable
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCDetails"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCDateStamps"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintHeapAtGC"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintTenuringDistribution"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCApplicationStoppedTime"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintPromotionFailure"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:PrintFLSStatistics=1"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
|
||||
|
||||
# If you are using JDK 6u34 7u2 or later you can enable GC log rotation
|
||||
# don't stick the date in the log name if rotation is on.
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:+UseGCLogFileRotation"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:NumberOfGCLogFiles=10"
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -XX:GCLogFileSize=10M"
|
||||
|
||||
# Configure the following for JEMallocAllocator and if jemalloc is not available in the system
|
||||
# library path (Example: /usr/local/lib/). Usually "make install" will do the right thing.
|
||||
# set LD_LIBRARY_PATH=<JEMALLOC_HOME>/lib/
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Djava.library.path=<JEMALLOC_HOME>/lib/"
|
||||
|
||||
# uncomment to have Cassandra JVM listen for remote debuggers/profilers on port 1414
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414"
|
||||
|
||||
# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See
|
||||
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version:
|
||||
# comment out this entry to enable IPv6 support).
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Djava.net.preferIPv4Stack=true"
|
||||
|
||||
# jmx: metrics and administration interface
|
||||
#
|
||||
# add this if you're having trouble connecting:
|
||||
# $env:JVM_OPTS="$env:JVM_OPTS -Djava.rmi.server.hostname=<public name>"
|
||||
#
|
||||
# see
|
||||
# https://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole
|
||||
# for more on configuring JMX through firewalls, etc. (Short version:
|
||||
# get it working with no firewall first.)
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
|
||||
#$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
|
||||
$env:JVM_OPTS="$env:JVM_OPTS $JVM_EXTRA_OPTS"
|
||||
|
||||
$env:JVM_OPTS = "$env:JVM_OPTS -Dlog4j.configuration=log4j-server.properties"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue