首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

Java 进程启停及诊断 Jarboot v2.1.0

在2.0.0版本基础上修复部分火狐、Safari浏览器的小问题,图标优化。修复了Docker挂载logs目录可能会出现的问题,推荐升级! 建议使用Safari和Chrome浏览器,火狐浏览器尽量更新到90版本以上,IE浏览器使用10以上版本。 可通过Gitee和GitHub下载最新的安装包,使用Docker的请更新下Jarboot的Docker镜像。 GitHub:https://github.com/majianzheng/jarboot Gitee:https://gitee.com/majz0908/jarboot Docker Hub:https://registry.hub.docker.com/r/mazheng0908/jarboot sudo docker run -itd --name jarboot -p 9899:9899 mazheng0908/jarboot 使用Docker时建议将/jarboot/services和/jarboot/logs挂载宿主机 修复问题 修复在Docker下启动多个容器时,将logs目录挂载后出现的状态不对的问题 修复Safari浏览器滚动条下部有一个小白点的问题 隐藏火狐浏览器滚动条 前端样式代码优化统一 在线调试增加正在Attach的图标过渡 新特性: 图标更新美化 支持以客户端的模式与k8s、Docker集成使用,集中管理、诊断 集成的方法步骤可以参考:Jarboot以客户端形式集成到k8s、Docker的方法

优秀的个人博客,低调大师

9月份Github上Java开源项目排行

9月份GitHub上最热门的开源项目排行已经出炉啦,一起来看看上榜详情吧: 1. python-mini-projects https://github.com/Python-World/python-mini-projects Star 4643 该项目内包含一系列简单的Python小项目,可以帮助你提高Python技能。其中就包含随机密码生成器、图片自动加水印、批量下载图片、整理文件系统、批量获取网站的IP地址和主机名等,一共包含100多个项目。 2. waydroid https://github.com/waydroid/waydroid Star 2273 Waydroid使用基于容器的方法在Ubuntu等常规GNU/Linux系统上启动完整的Android系统。 3. rich https://github.com/willmcgugan/rich Star 29813 ich是一个Python库,可以美化终端输出,而且pip就可以轻松的安装。 4. pytorch_geometric https://github.com/pyg-team/pytorch_geometric Star 12692 PyG (PyTorch Geometric)是一个基于PyTorch构建的库,可轻松编写和训练图神经网络(GNN),用于与结构化数据相关的广泛应用。它包含各种对图和其他不规则结构进行深度学习的方法,也称为几何深度学习,来自各种已发表的论文。此外,它还包含易于使用的小批量加载器,用于在许多小型和单个巨型图上进行操作、多 GPU 支持、大量通用基准数据集(基于简单的接口创建您自己的)、GraphGym实验管理器和有用的转换,既用于学习任意图形,也用于 3D 网格或点云。 5. Real-ESRGAN https://github.com/xinntao/Real-ESRGAN Star 3445 腾讯ARC实验室公开的AI模型,是通过模拟高分辨率图像变低分辩率过程中的各种退化,然后看到一张糊图后倒推出来它的高清图。 相比 ESRGAN,Real-ESRGAN 使用合成数据进行训练,引入了高阶退化建模以更全面逼真地模拟复杂的图像退化,重点考虑了合成过程中常见的振铃和 overshoot 伪影。还采用了一个具有谱归一化(Spectral Normalization)的 U-Net 鉴别器,来提高鉴别器的性能并稳定训练过程,最终实现了“青出于蓝胜于蓝”的效果。 6. qlib https://github.com/microsoft/qlib Star 6670 Qlib是微软亚洲研究院发布的AI量化投资开源平台“微矿 Qlib”,Qlib涵盖了量化投资的全过程,为用户的AI算法提供了高性能的底层基础架构,从框架设计上让用户可以更容易地应用AI算法来辅助解决量化投资的各个关键问题(例如Alpha预测,风险预测,市场动态性建模)。 7. PySimpleGUI https://github.com/PySimpleGUI/PySimpleGUI Star 8.5K 这是一个非常简单好用的Python图形界面库,它有 200 多个示例程序,几乎覆盖了日常的开发需求,拿来稍作修改就可以用,着实方便,内部封装了 tkinter,Qt(pyside2),wxPython和 Remi,Remi 用于浏览器支持,因此你很容易将你的界面搬到浏览器中而无需修改代码。 8. datasets https://github.com/huggingface/datasets Star 10047 最大的 ML 模型即用型数据集中心,具有快速、易于使用和高效的数据操作工具。 9. devops-exercises https://github.com/bregman-arie/devops-exercises Star 17297 该项目包含有关各种技术主题,你可以用它们来准备面试,主题涵盖Linux、Jenkins、AWS、SRE、Docker、Python、Ansible、Git、Kubernetes、Terraform、OpenStack、SQL、NoSQL、Azure、GCP、DNS等。 10. RobustVideoMatting https://github.com/PeterL1n/RobustVideoMatting Star 3904 PyTorch、TensorFlow、TensorFlow.js、ONNX、CoreML 中强大的视频抠图。 11. 12306 https://github.com/testerSunshine/12306 Star 30286 12306智能刷票,订票。 鸿蒙官方战略合作共建――HarmonyOS技术社区 【责任编辑:赵宁宁 TEL:(010)68476606】

优秀的个人博客,低调大师

性能监控之JMX监控docker中的java应用

2 --> 今天在配置docker和JMX监控的时候,看到有一个细节和非容器环境中的JMX配置不太一样。所以在这里写一下,以备其他人查阅。 一般情况下,我们配置JMX只要写上下面这些参数就可以了。 以下是无密码监控时的JMX配置参数(有密码监控的配置和常规监控无异)。 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9998 -Djava.rmi.server.hostname=<serverip> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 但是在docker容器中这样配置的时候,会出现这个错误。 这里就要说明一下逻辑了。为什么会这样呢? 先看docker环境的网络结构。 容器使用默认的网络模型,就是bridge模式。在这种模式下是docker run时做的DNAT规则,实现数据转发的能力。所以我们看到的网络信息是这样的: docker中的网卡信息: [root@f627e4cb0dbc /]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.0.3 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe12:3 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:12:00:03 txqueuelen 0 (Ethernet) RX packets 366 bytes 350743 (342.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 358 bytes 32370 (31.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 docker中的路由信息: [root@a2a7679f8642 /]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default gateway 0.0.0.0 UG 0 0 0 eth0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 [root@a2a7679f8642 /]# 宿主机上的对应网卡信息: docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 ether 02:42:44:5a:12:8f txqueuelen 0 (Ethernet) RX packets 6691477 bytes 4981306199 (4.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6751310 bytes 3508684363 (3.2 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 宿主机上的路由信息: [root@7dgroup ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default gateway 0.0.0.0 UG 0 0 0 eth0 link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth0 172.17.208.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.16.0 0.0.0.0 255.255.240.0 U 0 0 0 br-676bae33ff92 所以宿主机和容器是可以直接通信的,即便端口没有映射出来。如下所示: [root@7dgroup ~]# telnet 172.18.0.3 8080 Trying 172.18.0.3... Connected to 172.18.0.3. Escape character is '^]'. 另外,因为是桥接的,宿主机上还有类似veth0b5a080的虚拟网卡设备信息,如: veth0b5a080: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 42:c3:45:be:88:1a txqueuelen 0 (Ethernet) RX packets 2715512 bytes 2462280742 (2.2 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2380143 bytes 2437360499 (2.2 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 这就是虚拟网卡对veth pair,docker容器里一个,宿主机一个。 在这种模式下,有几个容器,主机上就会有几个veth开头的虚拟网卡设备。 但是如果不是宿主机访问的话,肯定是不通的。如下图所示: 当我们用监控机 访问的时候,会是这样的结果。 Zees-Air-2:~ Zee$ telnet <serverip> 8080 Trying <serverip>... telnet: connect to address <serverip>: Connection refused telnet: Unable to connect to remote host Zees-Air-2:~ Zee$ 因为8080是容器开的端口,并不是宿主机开的端口,其他机器是访问不了的。 这就是为什么要把端口映射出来给远程访问的原因,映射之后的端口,就会有NAT规则来保证数据包可达。 查看下NAT规则,就知道。 [root@7dgroup ~]# iptables -t nat -vnL Chain PREROUTING (policy ACCEPT 171 packets, 9832 bytes) pkts bytes target prot opt in out source destination 553K 33M DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT 171 packets, 9832 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 2586 packets, 156K bytes) pkts bytes target prot opt in out source destination 205K 12M DOCKER all -- * * 0.0.0.0/0 !60.205.104.0/22 ADDRTYPE match dst-type LOCAL 0 0 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT 2602 packets, 157K bytes) pkts bytes target prot opt in out source destination 265K 16M MASQUERADE all -- * !docker0 172.18.0.0/16 0.0.0.0/0 0 0 MASQUERADE all -- * !br-676bae33ff92 192.168.16.0/20 0.0.0.0/0 0 0 MASQUERADE tcp -- * * 192.168.0.4 192.168.0.4 tcp dpt:7001 0 0 MASQUERADE tcp -- * * 192.168.0.4 192.168.0.4 tcp dpt:4001 0 0 MASQUERADE tcp -- * * 192.168.0.5 192.168.0.5 tcp dpt:2375 0 0 MASQUERADE tcp -- * * 192.168.0.8 192.168.0.8 tcp dpt:8080 0 0 MASQUERADE tcp -- * * 172.18.0.4 172.18.0.4 tcp dpt:3306 0 0 MASQUERADE tcp -- * * 172.18.0.5 172.18.0.5 tcp dpt:6379 0 0 MASQUERADE tcp -- * * 172.18.0.2 172.18.0.2 tcp dpt:80 0 0 MASQUERADE tcp -- * * 172.18.0.6 172.18.0.6 tcp dpt:9997 0 0 MASQUERADE tcp -- * * 172.18.0.6 172.18.0.6 tcp dpt:9996 0 0 MASQUERADE tcp -- * * 172.18.0.6 172.18.0.6 tcp dpt:8080 0 0 MASQUERADE tcp -- * * 172.18.0.3 172.18.0.3 tcp dpt:9995 0 0 MASQUERADE tcp -- * * 172.18.0.3 172.18.0.3 tcp dpt:8080 Chain DOCKER (3 references) pkts bytes target prot opt in out source destination 159K 9544K RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 0 0 RETURN all -- br-676bae33ff92 * 0.0.0.0/0 0.0.0.0/0 1 40 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3307 to:172.18.0.4:3306 28 1486 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6379 to:172.18.0.5:6379 2289 137K DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:91 to:172.18.0.2:80 3 192 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9997 to:172.18.0.6:9997 0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9996 to:172.18.0.6:9996 0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9002 to:172.18.0.6:8080 12 768 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9995 to:172.18.0.3:9995 4 256 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9004 to:172.18.0.3:8080 [root@7dgroup ~]# 我们看到了宿主机的91端口的数据会传给172.18.0.2的80端口。宿主机的3307会传给172.18.0.4的3306端口。 啰啰嗦嗦说到这里,那和JMX有啥关系。苦就苦在,JMX是这样的。 在注册时使用的是参数jmxremote.port,然后返回一个新的端口jmxremote.rmi.port。 在调用服务时使用是参数jmxremote.rmi.port。 前面提到了,因为docker在bridge模式下端口是要用-p显式指定的,不然没NAT规则,数据包不可达。所以在这种情况下,只能把jmxremote.rmi.port也暴露出去。所以必须显式指定。因为不指定的话,这个端口会随机开。随机开的端口又没NAT规则,所以是不通的了。 所以,这种情况只能指定jmxremote.rmi.port为固定值,并暴露出去。 配置如下: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9995 -Djava.rmi.server.hostname=<serverip> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=9995 像上面的设置就是两个都是9997,这样是允许的,这种情况下注册和调用的端口就合并了。 再启动docker容器的时候,就需要这样了。 docker run -d -p 9003:8080 -p 9995:9995 --name 7dgroup-tomcat5 -e CATALINA_OPTS="-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=9995 \ -Djava.rmi.server.hostname=<serverip> \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.rmi.port=9995" c375edce8dfd 然后就可以连接上JMX的工具了。 在有防火墙和其他的设备的网络环境中,也有可能出同样的问题。明白了JMX的注册调用逻辑之后,就可以解决各种类似的问题了。 网络链路是做性能分析的人必须想明白的技术点,所以前面说了那么多内容。 这里对于JMX工具的选择啰嗦两句。有人喜欢花哨的,有人喜欢简单的,有人喜欢黑窗口的。我觉得工具选择的时候,要看适用情况,在性能分析的时候,一定要选择合适的工具,而不是选择体现技术高超的工具。 最后留个作业: 如果docker run中如果指定-p 19995:9995,也就是换个端口暴露出去,其他配置都不变。JMX工具还能连得上吗? 如果jmxremote.rmi.port和jmxremote.port不合并,并且同时把两个端口都暴露出去,其他配置都不变。JMX工具还能连得上吗? 有兴趣的可以自己尝试下哦。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册