如何设置 Hudson CI 以便我可以在构建失败后从服务器发送电子邮件?目前我得到的只是以下错误:
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first
Run Code Online (Sandbox Code Playgroud)
一种解决方案是按如下方式启动 Hudson:
java -Dmail.smtp.starttls.enable="true" -jar /usr/share/hudson/hudson.war
Run Code Online (Sandbox Code Playgroud)
但是,我已经在使用以下内容来启动 Hudson:
sudo /etc/init.d/hudson start
Run Code Online (Sandbox Code Playgroud)
我认为解决方案是以某种方式将系统属性 mail.smtp.starttls.enable 设置在某个属性文件中,但我不知道该怎么做。我有哪些选择?
谢谢大家!
有谁知道将安装 tomcat7 的 ppa/repo。我知道我可以从源代码安装,但如果可能的话,我宁愿使用 PPA/Repo。
我找到了一个很好的用于太阳咳oracle-java 的,但到目前为止似乎还没有任何适用于 tomcat7 的东西。
我已经安装了 tomcat6 没有问题并且喜欢布局。我们正在认证我们的 tomcat7 应用程序,我希望有一个可靠的生产就绪设置。
以下是在干净的 Ubuntu LTS 服务器上安装 sun咳嗽oracle-java的秘籍:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:sun-java-community-team/sun-java6
sudo apt-get 更新
sudo apt-get install sun-java6-jdk
ubuntu@ubuntu:/etc/apt$ java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02,混合模式)
这里有一个简单的问题。
一个应用程序在尝试访问证书过期的网站时给了我这个异常: java.security.cert.CertificateExpiredException
所以,我更新了网站机器的证书并重新启动了它。当我尝试从 Firefox 或 Chrome 访问它时,它会加载新证书(它的到期日期设置在 2040 年附近)。
问题是,Java 应用程序似乎没有更新此证书,它似乎卡在某种内部缓存中。我已经尝试将它添加到keystore应用程序属性中并设置选项,例如-Dcom.sun.net.ssl.checkRevocation=false. 不管我做什么,它总是给我一个java.security.cert.CertificateExpiredException
有任何想法吗?
今天我注意到我的 LDAP 服务器 (OpenDS) 在每个可用内核上消耗 100% 的 CPU。快速诊断显示我在 futex 锁定期间有很多 ETIMEDOUT。
我如何调试它以找出发生了什么以及如何修复它?
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779077, {1342114766, 309244206}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779079, {1342114766, 309528293}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779081, {1342114766, 309812186}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779083, {1342114766, 310107537}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0 …Run Code Online (Sandbox Code Playgroud) 我试图检测我的系统中运行的是哪个版本的 java(我的意思是我想知道我的 java 安装是 32 位还是 64 位)
我试过了
$java -version
Run Code Online (Sandbox Code Playgroud)
输出以下
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.11.90)
(rhel-1.62.1.11.11.90.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
任何可以帮助我的人,真的很感激。
我在让 JMX 在 Jetty(9.1.3.v20140225) 上工作时遇到了一些问题,所以我已经阅读了关于这个的 Jetty doco。
所以我在jetty.conf中添加了以下内容
# ========================================================
# jetty.conf Configuration for jetty.sh script
# --------------------------------------------------------
# This file is used by the jetty.sh script to provide
# extra configuration arguments for the start.jar command
# created by that script.
#
# Each line in this file becomes an arguement to start.jar
# in addition to those found in the start.ini file
# =======================================================
jetty-logging.xml
jetty-started.xml
etc/jetty.xml
etc/jetty-jmx.xml
etc/jetty-jmx-remote.xml
Run Code Online (Sandbox Code Playgroud)
我添加了 jmx 作为 start.jar --add-to-start 命令的一部分,因为 doco 告诉我作为让 Jconsole …
我正在尝试启动一个 tomcat webapp,而只是测试服务器(vanilla tomcat8 下载),它似乎在启动时挂起。我的猜测是它挂在处理 SecureRandom 类的事情上。我听说 tomcat 有时会在生成熵时停顿。
这是我的版本:
爪哇
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud)
雄猫
8.0.15
Run Code Online (Sandbox Code Playgroud)
Ubuntu
VERSION="14.04.1 LTS, Trusty Tahr"
Run Code Online (Sandbox Code Playgroud)
当我尝试启动它时,它似乎挂起部署主机管理器 web 应用程序。这是我等待大约 5 分钟后的日志
willkara@SkyHold:/opt$ more /opt/tomcat8/logs/catalina.out
09-Jan-2015 14:42:50.085 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.15
09-Jan-2015 14:42:50.087 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Nov 2 2014 19:25:20 UTC
09-Jan-2015 14:42:50.088 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.15.0
09-Jan-2015 14:42:50.088 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux …Run Code Online (Sandbox Code Playgroud) 多个用户在 60 核计算服务器(基于 Linux/Ubuntu)上运行 Java 应用程序。有不同的应用程序,其中大多数不是内部开发的。
虽然系统管理员认为给定用户的 Java 进程在任何给定时刻使用 10 个内核都可以,但她希望他们使用的内核不要超过 10 个。
是否有任何 Java 或 OS 配置可用于防止进程以无限方式获取计算资源?
我们正在测试我们的 Java 应用程序,它被 OOM Killer 杀死,日志如下。
几点:这是一个java web 应用程序。它以 190G 的堆运行。服务器是一个总内存240G的EC2实例。我们正在 JDK 11 中尝试新的实验性 ZGC。当时应用程序没有负载,在类似 prod 的测试环境中运行。应用程序确实有一些由计划触发的处理,可能是内存和 CPU 密集型的,但这些处理经常运行并且没有失败。
应用程序代码与我们在生产中的代码没有显着变化。我们也成功地对此进行了负载测试,包括 12 小时的浸泡测试,没有问题。
现在到 OOM-Killer 日志。完整日志如下,但我觉得很奇怪的一件事是这一行:
Dec 18 23:24:59 ip-10-0-3-36 kernel: [ 775.571217] Killed process 4973 (java) total-vm:17181703924kB, anon-rss:9740kB, file-rss:0kB, shmem-rss:0kB
Run Code Online (Sandbox Code Playgroud)
虚拟机总大小约为 17 TB。这对我来说很奇怪,因为我们的应用程序甚至不会尝试正常请求这个。我怀疑我们可能遇到了一些 ZGC 或 ZGC+我们的代码错误,但我想确保我读对了。
我非常感谢任何帮助,完整的日志供参考:
Dec 18 23:24:59 ip-10-0-3-36 kernel: [ 775.158902] java invoked oom-killer: gfp_mask=0x14200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null), order=0, oom_score_adj=0
Dec 18 23:24:59 ip-10-0-3-36 kernel: [ 775.166556] java cpuset=/ mems_allowed=0
Dec 18 23:24:59 ip-10-0-3-36 kernel: [ 775.168975] CPU: 15 …Run Code Online (Sandbox Code Playgroud) 我在负载平衡器后面有一组 Java Vertx 服务器,用于处理峰值流量。一分钟它可能处理 150k r/m,下一分钟它可能处理 2mm r/m,然后又回到 150k r/m。我发现在这些高峰期间,整个队列可能会在几分钟内无响应并断开连接,而任何一台机器上的 cpu 和 mem 压力几乎没有达到 50% 的利用率。
为了测试究竟是什么导致了中断,我设置了一个测试服务器,它与我的生产队列中的一个服务器的规格相匹配,以查看在它发出之前我可以投入多少。我的测试涉及使用其他 10 台机器,每台机器打开 500 个到服务器的 https 连接,并发送 1mm 请求,每个请求有效负载约 2kb。这总共打开了 5k 个并发连接,发送了总共 10mm 的请求,用于大约 20gb 的数据传输。
一旦连接打开,我每分钟可以发出大约 70 万个请求。我只是通过向健康端点发出请求并记录响应时间来监控服务器的可用性。响应时间快,几十毫秒。我对这些结果很满意。
但是在大量数据开始进入之前,这 10 台机器必须首先建立 5k 连接。在此期间,服务器无响应,甚至在我尝试检查运行状况端点时可能超时。我相信这就是导致我的生产车队中断的原因 - 新连接的突然增加。一旦建立连接,服务器就可以轻松处理传入的所有数据。
我已经更新了 nofile ulimit、net.core.netdev_max_backlog、net.ipv4.tcp_max_syn_backlog 和 net.core.somaxconn,但在几秒钟内收到一连串 5k 新连接请求时它仍然挂起。
我可以做些什么来更快地建立新的连接?
编辑:
实际的服务器在 docker 容器中运行。我的网络设置没有应用于容器。接下来要尝试一下,看看它是否有所作为。
编辑编辑:
这一切都在 SSL 中。通过普通 HTTP 快速建立如此多的连接几乎是即时的。所以我必须弄清楚如何更快地建立 TLS 连接。
编辑编辑编辑:
我发现本机 java 安全 ssl 处理程序是瓶颈。切换到netty-tcnative(又名本机 OpenSSL)几乎解决了我的 HTTPS 问题。
java ×10
linux ×4
tomcat ×2
cache ×1
centos ×1
centos6 ×1
certificate ×1
debug ×1
http ×1
hudson ×1
jetty ×1
jmx ×1
multi-core ×1
networking ×1
oom-killer ×1
opends ×1
ssl ×1
strace ×1
tcp ×1
threads ×1
ubuntu ×1
ubuntu-10.04 ×1