小编Row*_*nto的帖子

Dockerignore:忽略除文件和Dockerfile之外的所有内容

所以主要目的是将胖jar应用程序停靠并放入Elasticbeanstalk.问题在于背景.如果我需要的只是一个jar文件,那么在docker中添加如此多的上下文有点愚蠢.

我一直在玩.dockerignore文件,但我迷路了.我试图使用gitignore否定,但它不起作用.

*
!Dockerfile
*/
!target/
target/*
!target/*.jar
Run Code Online (Sandbox Code Playgroud)

还有正则表达式的东西,但似乎不支持复杂的正则表达式.

^((?!Dockerfile).)*$
Run Code Online (Sandbox Code Playgroud)

我也试过在stackoverflow中搜索,这两个都是我找到的:

这个问题可能与第二个问题类似,但我认为这有点不同,因为在这里,我只想在上下文中包含一个文件.

任何帮助将不胜感激.

docker

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

100个码头集装箱与100个小型机器

所以我们有一个不是线程安全的应用程序.它正在使用的一些库正在对文件系统级别进行锁定.不幸的是,它没有正常工作,如果有一些并发使用的库会崩溃并抛出错误.我们也无法切换这个库.要实现并发,哪一个更好?在一台功能强大的机器中运行100个容器或将其分成100个小型机器?

由于我们使用的是亚马逊,我想的是每个运行一个容器的100个X t2.micro实例和一个带有100个泊坞容器的c4.8xlarge机器.我们对记忆没有任何问题.任务受CPU限制.但它也不是那么重,只要它只处理一个t2.micro实例就足以处理它.

我和一位同事讨论了哪一个更好.我更喜欢100个实例,因为我认为Docker隔离将是一个重大的开销.这就像你只有一个资源,但它分为100个需要使用资源的人.另一方面,我的同事提出了一些我认为可能有效的观点.创建Linux命名空间比启动整个操作系统要轻.因此,如果我们有100台机器,我们有100台操作系统,而使用大型机器,我们只有1台操作系统.

问题是,我不知道哪一个是正确的.有这方面知识的人可以解释哪一个会更好并给我一个具体的理由吗?

由于我意识到我刚问了一个不好的问题,我将尝试在这里添加更多信息.为了使问题更加准确,我并不是真的要问哪一个在我的特定用例中更好,哪个更便宜.这只是一个好奇心,在CPU方面表现更好.想象一下,我们有一个非常大的计算问题,我们必须做100个.我们想要并行化它们,但它们不是线程安全的.在100台小型机器或1台100台容器的强大机器中进行它们会更好吗?哪一个会更快完成,为什么?

如果我们只有一台功能强大的机器,那么所有这100个集装箱都不会争夺资源并减缓整个过程吗?如果它是100台小型机器,由于操作系统或其他因素,整体性能可能会更慢?无论如何,我对此没有任何经验.当然我可以试试这个,但最后,因为它不是理想的环境(有很多因素),所以结果不会是权威的.我一直在寻找那些知道两种情况如何在低级别工作的人的答案,并且可以论证哪种环境能够更快地完成任务.

linux parallel-processing concurrency amazon-ec2 docker

11
推荐指数
1
解决办法
2084
查看次数

如何使用自定义记录器在spring boot中记录访问日志

目前在spring boot 1.3中,我们只能将访问日志记录到文件系统中的文件中.有没有办法实际使用自定义记录器(如log4j2)来记录访问日志?

我目前正在使用带有spring boot的下载,但是在检查了spring boot源代码之后,使用DefaultAccessLogReceiver初始化了underow logger,它正在写入文件.我想尽可能使用AccessLogHandler,并避免编写记录访问权限的Web过滤器.

这有什么简单的方法吗?(写拉取请求除外)

java spring log4j2 spring-boot undertow

11
推荐指数
1
解决办法
2685
查看次数

Solr Filter Cache(FastLRUCache)占用太多内存并导致内存不足?

我有一个Solr设置.一个主服务器和两个从服务器用于复制.我们在索引中有大约7000万份文件.从站有16 GB的RAM.OS和HD为10GB,Solr为6GB.

但是,奴隶有时会失去记忆.当我们在内存不足之前下载转储文件时,我们可以看到该类:

org.apache.solr.util.ConcurrentLRUCache$Stats @ 0x6eac8fb88
Run Code Online (Sandbox Code Playgroud)

正在使用高达5Gb的内存.我们广泛使用过滤缓存,它的命中率为93%.这是solrconfig.xml中过滤器缓存的xml

<property name="filterCache.size" value="2000" />
<property name="filterCache.initialSize" value="1000" />
<property name="filterCache.autowarmCount" value="20" />

<filterCache class="solr.FastLRUCache"
             size="${filterCache.size}"
             initialSize="${filterCache.initialSize}"
             autowarmCount="${filterCache.autowarmCount}"/>
Run Code Online (Sandbox Code Playgroud)

查询结果具有相同的设置,但使用LRUCache并且它仅使用大约35mb的内存.是否有需要修复的配置有问题,或者我只需要更多内存用于过滤缓存?

java lucene solr out-of-memory

6
推荐指数
2
解决办法
5370
查看次数

为什么带有双重否定的类型缩小在打字稿中不起作用?

如果存在如下所示的双重否定条件,则打字稿无法解析该类型。在这里,变量 会出现编译错误c

const testFunction = (a: number | null, b: number | null) => {
    if (!a && !b) {
        return;
    }
    const c: number = a || b;
}
Run Code Online (Sandbox Code Playgroud)

我知道我们实际上可以用 if else 重写它并抛出异常。我只是想知道为什么这很难在打字稿中实现,并且没有更优雅的方式以打字稿能够理解的方式编写它吗?

typescript

6
推荐指数
1
解决办法
105
查看次数

slf4j,更改记录器或在运行时添加appender

我正在使用SLF4J进行日志记录(使用Log4J).使用的appender使用xml配置.

<appender name="business" class="org.apache.log4j.RollingFileAppender">
    <param name="maxFileSize" value="10MB" />
    <param name="maxBackupIndex" value="10" />
    <param name="File" value="${jboss.server.log.dir}/business.log" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %p [%t] %c - %m%n" />
    </layout>
</appender>
<category name="BusinessLogger" additivity="false">
    <level value="INFO" />
    <appender-ref ref="business" />
</category>
Run Code Online (Sandbox Code Playgroud)

在拦截器中调用日志进程.现在,我正在尝试测试日志的输出.我在运行时使用以下命令调用记录器:

private static final Logger BUSINESS_LOGGER = LoggerFactory.getLogger("BusinessLogger");
Run Code Online (Sandbox Code Playgroud)

为了测试日志(使用junit),日志的输出需要作为变量保存在某处.我有一个创建自定义appender的想法,它将最后一个日志保存到变量中,但我似乎无法添加appender或更改appender,因为slf4j中的Logger类是一个接口.有没有人知道任何解决方法?

log4j slf4j java-ee interceptor

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