我需要将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
命令看到的内容:取消Logstash容器后,将填充统计信息。
最佳答案
笔记本电脑可以有32GB,但是使用过的Hyper-V计算机可能配置了较低的限制(我想默认值为2GB)。所有Java容器都占用大量内存,因为您没有限制Java内存(所有-XX:*RAM*
配置)。那么不带logstash的容器会消耗多少内存(您可以在docker stats中看到),以及为VM配置了多少内存(Docker的系统任务栏->设置->高级)?
关于oracle - Docker中的Logstash没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59812128/