标签: java

生产服务器上的 OpenJDK 或 Oracle Java

我对在生产服务器上使用哪种实现更好感到有些困惑?有什么理由不选择 OpenJDK?

java

5
推荐指数
1
解决办法
7398
查看次数

Linux(非透明)每进程大页记帐

我最近转变了一些Java应用程序与Linux的手动配置的大页面上运行,如所描述这里。我指出“手动配置”是因为它们不是 透明的大页面,这给我们带来了一些性能问题。

所以现在,我在一个系统上运行了大约 10 个 tomcat,我很想知道每个 tomcat 使用了多少内存。

我可以/proc/meminfo按照Linux Huge Pages Usage Accounting 中的描述获取摘要信息。

但是我找不到任何工具来告诉我每个进程的实际大页面使用情况。

我/proc/pid/numa_stat探查了一下,发现了一些有趣的信息,这些信息使我如此粗暴:

function pshugepage () {
    HUGEPAGECOUNT=0
    for num in `grep 'anon_hugepage.*dirty=' /proc/$@/numa_maps | awk '{print $6}' | sed 's/dirty=//'` ; do
        HUGEPAGECOUNT=$((HUGEPAGECOUNT+num))
    done
    echo process $@ using $HUGEPAGECOUNT huge pages
}
Run Code Online (Sandbox Code Playgroud)

或者这个,在perl中:

sub counthugepages {
    my $pid=$_[0];
    open (NUMAMAPS, "/proc/$pid/numa_maps") || die "can't open numa_maps";
    my $HUGEPAGECOUNT=0;
    while (my $line=<NUMAMAPS>) {
        next unless ($line …
Run Code Online (Sandbox Code Playgroud)

linux java linux-kernel

5
推荐指数
1
解决办法
4549
查看次数

kill -3 是否真的终止了一个 java 进程?或者只是生成一个线程转储?

CentOS 5.9

如果我运行kill -3 <java process pid>实际会发生什么?根据这篇红帽文章,我知道生成了 Java 线程转储,但进程是否终止?它似乎不是基于我的测试:

[root@foobox ~]# kill -3 14559

[root@foobox ~]# service foo status
foo (pid 14559) is running...
Run Code Online (Sandbox Code Playgroud)

换句话说:我可以通过这种方式收集线程转储而不影响服务吗?

linux java centos pid

5
推荐指数
2
解决办法
2万
查看次数

以 root 身份启动 tomcat 的权限被拒绝

我刚开始使用 CentOS。

我安装Java

yum install java-1.7.0-openjdk-devel
Run Code Online (Sandbox Code Playgroud)

添加了一个用户:

$useradd supersite
Run Code Online (Sandbox Code Playgroud)

下载的tomcat:

$wget http://apache.mirror.anlx.net/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.zip
$unzip apache-tomcat-7.0.42.zip -d tomcat7
Run Code Online (Sandbox Code Playgroud)

创建的服务配置:

$ cd /etc/init.d
$ edit tomcat7-supersite
Run Code Online (Sandbox Code Playgroud)

我从这里复制了文件。

但是,当我尝试以 root 用户身份运行时(我看到我是 root@myip)

service tomcat7-supersite start
Run Code Online (Sandbox Code Playgroud)

我得到:

env: /etc/init.d/tomcat7-supersite: Permission denied
Run Code Online (Sandbox Code Playgroud)

为什么?

linux tomcat java centos yum

5
推荐指数
1
解决办法
3万
查看次数

通过 AD Enterprise CA 的 Java 部署规则集

我的目标是在我的组织中建立一个 Java 部署规则集,但是当我们有一个通过 Active Directory 运行的工作 CA 时,我不想向第三方证书颁发机构支付代码签名证书。我遵循了我认为正确的程序来完成这项工作,但是当我最终运行任何 Java 小程序时,我收到以下错误:

无法验证自签名部署规则集 jar

我遵循的步骤是:

  1. 导出我们的根 CA 证书
  2. 将根证书导入 JRE 安装路径中的 cacerts
  3. 将根证书导入个人密钥库
  4. 使用 keytool 为具有个人密钥库的新证书生成 CSR
  5. 使用 certreq 向企业 CA 提交 CSR,使用“代码签名”模板
  6. 将该证书导入个人密钥库
  7. 创建了一个非常基本的部署规则集并将其编译成一个 jar
  8. 使用步骤 6 中个人密钥库中的证书对 jar 进行签名
  9. 将签名的 jar 复制到 \Windows\Sun\Java\Deployment\

上述步骤均已正确完成 - 与无效证书链等无关。我可以在 Java 控制面板中看到根 CA 证书,当我单击控制面板中的部署规则集链接并查看其证书时,我看到了第 6 步中的证书及其父 CA,两者都有未来的到期日期和据我所知的正确信息。但是我在运行任何小程序时仍然收到验证错误

那么 - 是否根本不可能做到这一点,我们必须支付证书费用?或者我(希望)做错了什么?如果有人有任何见解,将不胜感激,谢谢!

certificate java ad-certificate-services

5
推荐指数
1
解决办法
5万
查看次数

Amazon 上的负载均衡器没有为 Cookie 设置安全标志

我们有一个在 Amazon 上运行的基于 Java 的应用程序,并且已经配置了我们的 Amazon ELB 以成功连接到它们。但是,我们看到 Cookie 标志未设置为安全。

Name    Value       Domain     Path    Expires     Secure

AWSELB  lkajsldf    test.com   /       Session     No
Run Code Online (Sandbox Code Playgroud)

如何使 cookie 安全?

linux java amazon-elb

5
推荐指数
2
解决办法
1万
查看次数

kill -9 进程不会消失并且端口仍然绑定

我们有一个在 Mac OS X 上运行的 Java 服务器应用程序。

有时这个应用程序变得没有响应,我们不得不使用kill -9. 然而,这个过程并没有消失;它似乎仍然是ps,其名称周围带有括号,并且 STAT 列中有一个问号:

$ ps u -p 776
USER       PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
camadmin   776   0.0  0.0        0      0   ??  ?E    5:12PM   0:00.00 (java)
Run Code Online (Sandbox Code Playgroud)

更重要的是,服务器正在使用的端口仍然是绑定的:

$ netstat -na | grep 9902
tcp4       0      0  *.9902      *.*                    LISTEN
Run Code Online (Sandbox Code Playgroud)

即使它不可见lsof:

$ sudo lsof -P -i tcp | grep 9902
$
Run Code Online (Sandbox Code Playgroud)

由于端口仍然绑定,我们无法重新启动服务器应用程序。没有重新启动机器,可以做些什么来释放端口并真正杀死这个进程?

java port mac-osx kill netstat

5
推荐指数
1
解决办法
3153
查看次数

通过 Java 升级保留导入的 CA 证书

我已将内部证书颁发机构导入 Java 的 CA 密钥库。(使用 keytool 导入“cacerts”商店)这很好用,直到我更新 Java RPM。此时,所有这些导入的证书都不会转移到新安装中。因此,当尝试建立 SSL 连接时,应用程序会爆炸。

有没有办法通过 Java 升级使这些证书持久化?或者在升级触发器上重新运行导入命令的简单方法?我显然可以将这些命令编写到我的升级过程中,但我希望有一个更优雅的解决方案。

作为参考,这是 RHEL 5.10 等效版本(技术上为 Oracle Linux)。我正在通过官方存储库使用 java-1.7.0-openjdk,并且刚刚升级到 U65。

linux redhat java

5
推荐指数
2
解决办法
6135
查看次数

Linux 上的 Java 内存不足,即使有足够的可用内存用于缓存

我正在尝试在 Red Hat Enterprise Linux Server 6.5 (Santiago) 版上启动一个进程,该进程失败了,因为它无法分配足够的内存。

# There is insufficient memory for the Java Runtime Environment to continue. 
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
Run Code Online (Sandbox Code Playgroud)

问题不在于 Java 应用程序本身 - 当我简单地运行时,我也会收到错误:

版本

查看内存消耗:

自由 -m

             total       used       free     shared    buffers     cached
Mem:         32069      31276        792          0        556      16948
-/+ buffers/cache:      13771      18297
Swap:         9325         38       9287
Run Code Online (Sandbox Code Playgroud)

因此,Mem 报告说正在使用 32 Gb 内存中的 31 Gb,但应该有 18 Gb …

linux redhat java

5
推荐指数
1
解决办法
4万
查看次数

公司如何处理对同一用户的不同 Java 要求的需求?

在我们公司,我们使用 GPO 来推送 Java 更新等软件更新。我们在位于不同国家/地区的不同办公室有大约 150 名用户,所有用户都使用 Windows 7。我们有一些特定于办公室的应用程序,并且没有用户具有管理员权限。

最近,在我们的一些办公室,有时用户会需要不同版本的 Java;他们使用的一个应用程序需要版本 A 的 Java,而另一个应用程序需要版本 B。最糟糕的情况是同一用户需要不同的 Java 版本,这取决于所使用的应用程序(Web 应用程序或独立应用程序)。

本月和上个月,我们在两个办公室的几个用户遇到了这个问题。到目前为止,我们在需要时安装了足够的 Java 版本。显然,这是耗时的。下个月,我们将考虑为旧 Java 版本提供特定的虚拟机或计算机。但这也不是最好的解决方案。其他解决方案是什么?

公司如何处理对同一用户的不同(且不兼容)Java 需求的需求?

windows-7 java group-policy update

5
推荐指数
1
解决办法
510
查看次数