我正在使用 OpenJDK 11 和一个非常简单的 SpringBoot 应用程序,它几乎唯一的功能就是启用了 SpringBoot 执行器,因此我可以调用/actuator/health等。
我在 GCE 上也有一个 kubernetes 集群,非常简单,只有一个带容器的 pod(当然包含这个应用程序)
我的配置有一些我想强调的关键点,它有一些要求和限制
resources:
limits:
memory: 600Mi
requests:
memory: 128Mi
Run Code Online (Sandbox Code Playgroud)
它有一个就绪探针
readinessProbe:
initialDelaySeconds: 30
periodSeconds: 30
httpGet:
path: /actuator/health
port: 8080
Run Code Online (Sandbox Code Playgroud)
我还设置了一个 JVM_OPTS 之类的(我的程序显然正在使用)
env:
- name: JVM_OPTS
value: "-XX:MaxRAM=512m"
Run Code Online (Sandbox Code Playgroud)
问题
我启动它,它每次都在大约 3 小时内被 OOMKilled!
我从不自己调用任何东西,唯一的调用是 kubernetes 每 30 秒进行一次就绪探测,这足以耗尽内存吗?我也没有实现任何不寻常的东西,只是一个 Get 方法,它在所有 SpringBoot 导入中说 hello world 以拥有执行器
如果我运行 kubectl top pod XXXXXX 我实际上会看到逐渐变得越来越大
我尝试了很多不同的配置、技巧等,但似乎任何东西都适用于基本的 SpringBoot 应用程序
有没有办法以 Java 可以引发 OutOfMemory 异常的方式实际硬限制内存?还是为了防止这种情况发生?
提前致谢
NAME …Run Code Online (Sandbox Code Playgroud) 尝试使用cloud_sql_proxy机制连接到 CloudSQL 实例时,我收到一个奇怪的 Err 400 缺少项目参数
我有一个带有可用 CloudSQL postgres 数据库的 GCE 项目,我在计算 api 上的应用程序可以使用它,我可以从我在 GCE 项目中配置的任何 VM 执行常规 psql。
但是,当我尝试使用 cloud_sql_proxy 从我的笔记本电脑连接到数据库时,我收到了这个奇怪的错误。
我正在按照本文档的说明进行操作:https : //cloud.google.com/sql/docs/postgres/connect-admin-proxy#install
因此,按照该文档,我有:
{
"type": "service_account",
"project_id": "my-proyect-21432",
"private_key_id": "<hidden intentionally>",
"private_key": "<hidden intentionally>",
"client_email": "cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com",
"client_id": "<hidden intentionally>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)
user@hostname:~$ ./cloud_sql_proxy -instances=db1=tcp:15432 -credential_file=my-proyect-21432.json
2019/05/29 10:17:25 Rlimits for file descriptors set to {&{8500 65536}}
2019/05/29 …Run Code Online (Sandbox Code Playgroud) 我的 Ingress 上已经有很多域和很多路径,因为这是一个包含许多微服务的环境。
我如何以某种方式编辑我的入口,例如当有人访问路径时/servicex它会得到/serviceb
我当前的入口如下(为简单起见,我省略了其他主机的一些路径)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: main-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
nginx.ingress.kubernetes.io/max-worker-connections: "0"
nginx.ingress.kubernetes.io/max-worker-open-files: "0"
nginx.ingress.kubernetes.io/client-header-buffer-size: "4k"
spec:
tls:
- hosts:
- subdomain-a.domain.com
- subdomain-b.domain.com
- subdomain-c.domain.com
- subdomain-d.domain.com
- subdomain-e.domain.com
secretName: domain-com-secret
rules:
- host: subdomain-a.domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: default-service
port:
number: 80
- path: /serviceb
pathType: Prefix
backend:
service:
name: b-service
port:
number: 80
- path: /servicec
pathType: Prefix
backend: …Run Code Online (Sandbox Code Playgroud)