如何通过环境变量设置Java的最小和最大堆大小?
我知道在启动java时可以设置堆大小,但我希望在服务器上通过环境变量进行调整.
我试图[E=VAR:VAL]在.htaccess文件中使用RewriteRule规则上的标志设置Apache环境变量(用于PHP).
我已经发现变量在PHP中作为服务器变量访问$_SERVER而不是$_ENV(这有一定意义).但是,我的问题是一些规则[E=VAR:VAL]标志按预期工作,我最终得到一个变量,$_SERVER['VAR']但对于其他规则,我以变量$_SERVER['REDIRECT_VAR']或$_SERVER['REDIRECT_REDIRECT_VAR']等结束
A.什么原因导致Apache中设置的环境变量使用[E=VAR:VAL]标志通过将"REDIRECT_"添加到变量名前面来重命名?
B.我可以做些什么来确保我最终得到一个名称不变的环境变量,这样我就可以在PHP中访问它,$_SERVER['VAR']而无需检查变量名称的变体,其中有一个或多个"REDIRECT_"实例被预先添加对吗?
找到了部分解决方案.如果需要,在重写规则的开头添加以下内容将重新创建每个重定向上的原始ENV:VAR(以及在那里保留REDIRECT_VAR版本):
RewriteCond %{ENV:REDIRECT_VAR} !^$
RewriteRule .* - [E=VAR:%{ENV:REDIRECT_VAR}]
Run Code Online (Sandbox Code Playgroud) vagrant up如果您使用Ruby配置器,则在调用时看起来像传递环境变量很简单:
VAR=123 vagrant up
Run Code Online (Sandbox Code Playgroud)
在Vagrantfile中:
ENV['VAR']
Run Code Online (Sandbox Code Playgroud)
如何使用:shell配置程序执行此操作?简单地这样做似乎不起作用:
$VAR
Run Code Online (Sandbox Code Playgroud) 背景:
目前我们正在使用Docker和Docker Compose来提供服务.我们已将不同环境的配置外部化为定义应用程序读取的环境变量的文件.例如一个prod.env文件:
ENV_VAR_ONE=Something Prod
ENV_VAR_TWO=Something else Prod
Run Code Online (Sandbox Code Playgroud)
和一个test.env文件:
ENV_VAR_ONE=Something Test
ENV_VAR_TWO=Something else Test
Run Code Online (Sandbox Code Playgroud)
因此,我们可以在启动容器时简单地使用prod.envor test.env文件:
docker run --env-file prod.env <image>
Run Code Online (Sandbox Code Playgroud)
然后,我们的应用程序根据中定义的环境变量获取其配置prod.env.
问题:
apiVersion: v1
kind: Pod
metadata:
labels:
context: docker-k8s-lab
name: mysql-pod
name: mysql-pod
spec:
containers:
-
env:
-
name: MYSQL_USER
value: mysql
-
name: MYSQL_PASSWORD
value: mysql
-
name: MYSQL_DATABASE
value: sample
-
name: MYSQL_ROOT_PASSWORD
value: supersecret
image: "mysql:latest"
name: mysql
ports:
-
containerPort: 3306
configuration environment-variables configuration-files docker kubernetes
我有一个指向特定文件夹的环境变量集(例如,称之为MYFOLDER).在%MYFOLDER%\SubFolderWindows资源管理器中键入时,将显示子文件夹.但是,当我SelectedPath = @"%MYFOLDER%\SubFolder";转到a时FolderBrowserDialog,它不起作用.
我尝试使用Path.GetFullPath(..),但这似乎返回可执行文件的bin文件夹(在VS中调试时),结尾是%MYFOLDER%,而不是我期望的路径.
任何人都知道如何正确使用环境变量?
可以存储在Linux上的环境变量中的数据量是否有限制,如果是这样的话:它是什么?
对于Windows,我发现以下知识库文章总结为:Windows XP或更高版本:8191个字符Windows 2000/NT 4.0:2047个字符
在旧版本的Windows中,只需打开"控制面板",选择"系统"小程序,选择"高级"选项卡,然后单击"环境变量"按钮.作为普通用户,您可以编辑"用户变量",但不能编辑"系统变量".
在Windows Server 2008 R2中,如果我尝试单击"系统"小程序中的"高级系统设置"选项,则会提示输入管理员密码.
目前,我Path.GetTempPath()用来确定在哪里写我的日志文件,但最近我遇到了一个用户的机器,其中返回的路径不是我所期望的.
通常,返回的路径是C:\ Documents and Settings\[userid]\Local Settings\Temp 但在这种情况下,它是C:\ Temp
这通常不是问题,但由于某种原因,有问题的用户无权写入C:\ Temp
我仔细检查了环境变量,并且USER环境变量按预期指向C:\ Documents and Settings\[userid]\Local Settings\Temp,而SYSTEM环境变量指向C:\ WINNT\Temp.
所以...从哪里Path.GetTempPath()获得它的价值?组策略?注册?
我用谷歌搜索,但无济于事.
我们开发人员编写的大多数应用程序都需要在启动时进行外部参数化.我们传递文件路径,管道名称,TCP/IP地址等.到目前为止,我一直在使用命令行将这些传递给正在启动的应用程序.我不得不解析命令行main并将参数指向他们需要的地方,这当然是一个很好的设计,但很难维护大量的参数.最近我决定使用环境变量机制.它们是全局的,可以从任何地方访问,从架构的角度来看不太优雅,但限制了代码量.
这些是我对这两种策略的第一次(也可能是很浅的)印象,但我想听听更多有经验的开发人员的意见 - 使用环境变量和命令行参数将参数传递给进程的起伏是什么?我想考虑以下事项:
备注:
广告.这是我感兴趣的主要方面.
广告.这有点务实.据我所知,这是目前在Windows上一定的局限性巨大(超过32kB的两个命令行和环境块).我想这不是问题,因为如果需要,你应该使用一个文件来传递大量的参数.
广告.我几乎不知道Unix,所以我不确定这两种策略是否像在Windows上一样可用.如果你愿意,请详细说明.
command-line process environment-variables argument-passing spawn
我刚刚下载了Android Studio.在尝试运行它时,我不得不修改环境变量并添加
JAVA_HOME
和
C:\ PROGRA〜2 \的Java\jdk1.6.0_22
一旦我完成了这个障碍,现在我收到了另一个错误:
The environment variable JAVA_HOME (with the value of *C:\Progra~2\Java\jdk1.6.0_22*) does not point to a valid JVM installation.
Run Code Online (Sandbox Code Playgroud)
我查看了其他类似的问题,我被要求检查版本,所以我在CMD中做了以下事情:
C:\Users\Andre>java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
C:\Users\Andre>javac -version
javac 1.6.0_22
Run Code Online (Sandbox Code Playgroud)
从结果看来我似乎有JVM.
我也为JAVA_HOME尝试了这些路径,每次关闭并重新打开一个新的CMD窗口
C:\Program Files (x86)\Java\jre7
C:\Program Files (x86)\Java\jre6
C:\Program Files (x86)\Java\jdk1.6.0_22
C:\Program Files (x86)\Java\jre7\bin
C:\Program Files (x86)\Java\jre6\bin
C:\Program Files (x86)\Java\jdk1.6.0_22\bin
Run Code Online (Sandbox Code Playgroud)