Docker 中 java 应用内存配置问题
使用 Dockerhub java:8
为基础镜像创建 Springboot APP 时,会遇到很多内存配置的问题。首先容器内存使用 cgroup 技术隔离,当对容器作出限制时,低版本 java 找不到正确的内存配置,
而 java8 默认会取总内存 1/4 作为堆内存配置来启动应用,可能会导致 OOM 频繁发生,并且不便于节约服务器资源。
使用 Dockerhub java:8
为基础镜像创建 Springboot APP 时,会遇到很多内存配置的问题。首先容器内存使用 cgroup 技术隔离,当对容器作出限制时,低版本 java 找不到正确的内存配置,
而 java8 默认会取总内存 1/4 作为堆内存配置来启动应用,可能会导致 OOM 频繁发生,并且不便于节约服务器资源。
目前 Kubernetes 自身网络卷挂载尚不支持共有云提供的对象存储产品,但是可以通过 Kubernetes 自身所拥有的功能利用一些小技巧将对象存储挂载到集群内实现共享读写的目的。
通过搜索,我们可以知道阿里云给自己的 Kubernetes 平台做了挂载 OSS 的插件,最佳实践可以参考K8S有状态服务-OSS存储使用最佳实践,理论上使用阿里云 OSS 产品都可以自行安装插件来使用,使用阿里云产品的可以优先参考文档说明,或者提交工单寻求帮助。文中所举例使用的是腾讯云的 COS,用法则是参考 AWS 博客写的 k8s 挂载 S3 说明 Kubernetes pods used shared S3 storage 。
如果你跟我一样“喜欢”并使用着 CoreOS 这个专为运行容器设计的系统,对它极精简和苛刻的安全策略着迷的同时,又烦闹于没有 crond 定时服务来管理一些小计划任务,可以参考这篇文章写的一个实例。 使用 systemd 自带的 timer 即定时器功能来替代 crond 管理启动定时任务。 文中给出我自己服务器上使用 Docker 定时更新 Let’s Encrypt 证书的 unit 配置文件,及一些简单的管理查看办法供参考。
众所周知,Debian 系系统默认的 shell 是 dash
(Debian Almquist shell),日常使用也很少发现有不同于 bash
,完全不能用的地方。
最近,我在重写开发搞的 kettle 定时任务时发现了奇怪的问题,日志正常打印,看起来所有 job 都正确执行了,但是数据库中数据却没有按预期更新。反复折腾排除后,发现是脚本第一行声明执行命令不同的缘故,也就是 ubuntu 环境下使用 sh
执行会导致数据库数据没有正确更新。
用 cURL 简单写一个查询 Docker 镜像的脚本,可以非常方便的查看搜索可以选 tag 。