oracle - Docker中的Logstash没有响应

标签 oracle docker elasticsearch logstash

我需要将ElasticSearch / Logstash进程从Windows迁移到Docker。此过程在Windows中运行良好(Elasticsearch和Logstash是Logstash读取Oracle数据库以提供ElasticSearch的服务)。问题是,当我启动Logstash容器时,Docker变得无响应且非常慢,例如docker ps需要一分钟。需要花费一分钟时间才能杀死logstash容器。我正在Windows 10 Pro和Docker Desktop上运行它,并遵循these steps

我下载了两个图像(elasticsearch:7.5.1和logstash:7.5.1),并使用以下命令启动了容器

docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.5.1


docker run --name cont_logstash -d -e LIB=/usr/share/logstash/pipeline/ojdbc8.jar -e 
DRIVER=Java::oracle.jdbc.driver.OracleDriver -e CONN=jdbc:oracle:thin:@//172.0.0.2:51521/XE 
-e USER=userdb -e PASSWORD=xxx -v vol_logstash:/usr/share/logstash/pipeline/ logstash:7.5.1

请注意,我创建了一个卷来存储logstash.conf文件和ojdbc8.jar Oracle JDBC驱动程序。如果在Logstash容器中创建bash,则可以在/usr/share/logstash/pipeline/中看到这些文件。

Docker不仅非常慢,而且Logstash根本不起作用。如果我使用-it交互式运行Logstash,则会收到此消息(请注意,没有关于安装的警告):

C:\docker>docker run --name cont_logstash -it -e LIB=/usr/share/logstash/pipeline/ojdbc8.jar -e DRIVER=Java::oracle.jdbc.driver.OracleDriver -e CONN=jdbc:oracle:thin:@//localhost:51521/XE -e USER=userdb -e PASSWORD=xxx -v vol_logstash:/usr/share/logstash/pipeline/ logstash:7.5.1

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.headius.backport9.modules.Modules (file:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.8.0.jar) to field java.io.FileDescriptor.fd WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release



根据文档Logstash on Docker在控制台中的日志,但是我在屏幕上看不到任何错误。任何想法如何解决这个问题?

更新

我运行其他容器没有问题,包括8.4 Gb Oracle数据库。

这是我用docker stats命令看到的内容:

enter image description here

取消Logstash容器后,将填充统计信息。

最佳答案

笔记本电脑可以有32GB,但是使用过的Hyper-V计算机可能配置了较低的限制(我想默认值为2GB)。所有Java容器都占用大量内存,因为您没有限制Java内存(所有-XX:*RAM*配置)。那么不带logstash的容器会消耗多少内存(您可以在docker stats中看到),以及为VM配置了多少内存(Docker的系统任务栏->设置->高级)?

关于oracle - Docker中的Logstash没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59812128/

相关文章:

oracle - 计算 Oracle APEX 上的登录用户数

node.js - 找不到模块 "express"- docker-compose nodejs 服务

java - 基于 Elasticsearch URI 的搜索查询,无需源字段

oracle - 了解 Table 和 Transaction API 之间的区别

java - 运行时动态 Web 服务调用

mongodb - 无法通过 ssh 在 ubuntu docker 容器中运行 mongod(Docker 使用 "--net=host"启动)

完成执行后docker exec命令不返回

elasticsearch - 如果在插入请求后立即发送删除请求,则不会删除文档

c# - NEST Elasticsearch 中的 Lambda 查询具有过滤器和值数组

java - 多线程 Java 程序中的 Oracle DB 连接池