小编red*_*tom的帖子

如何确定关闭我的 Java 应用程序的原因?

我有一个在 RHEL 6.10 上运行的 Java8 应用程序。此应用程序通过常用方法注册关闭处理程序:

Thread shutdownThread = new Thread(()=>{
   Logger.info("Got shutdown signal");
   // Do cleanup
});
Runtime.getRuntime().addShutdownHook(shutdownThread);
Run Code Online (Sandbox Code Playgroud)

此应用程序由 Jenkins 构建启动(环境BUILD_ID变量设置为dontkillme)。应用程序初始化成功,但大约 30 秒后调用关闭挂钩并终止应用程序。我试图弄清楚是谁让我关闭以及为什么。我已经进行了监控top,它在运行时似乎没有出现内存问题,所以我不认为 OOM 杀手是罪魁祸首。我也看了看/var/log/dmesg/var/log/messages不看相关的有什么无论是。我不认为 Jenkins 会杀死我,因为我设置了BUILD_ID,也因为应用程序在“父”Jenkins 作业仍在运行时死亡。

我可以使用哪些其他方法/工具来查看发生了什么?请注意,我的环境非常封闭,因此很难从 Internet 下载和运行某些内容,希望我可以使用标准 RHEL6 安装中的某些内容。

java rhel jenkins java-8 rhel6

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

如何通过多个接口"携带"协方差

我有一个看起来像这样的接口结构:

在最基本的级别是具有此定义的IDataProducer:

public interface IDataProducer<out T>
{
    IEnumerable<T> GetRecords();
}
Run Code Online (Sandbox Code Playgroud)

和一个看起来像这样的IDataConsumer:

public interface IDataConsumer<out T>
{
    IDataProducer<T> Producer { set; }
}
Run Code Online (Sandbox Code Playgroud)

最后,我有一个像IDataConsumer这样的IWriter:

public interface IWriter<out T> : IDataConsumer<T>
{
    String FileToWriteTo { set; }

    void Start();
}
Run Code Online (Sandbox Code Playgroud)

我想制作IWriter的泛型类型T协变,以便我可以实现一个Factory方法来创建可以处理不同对象的Writer,而不必知道提前返回什么类型.这是通过将通用类型标记为"out"来实现的.问题是,我在IDataConsumer上遇到编译错误,因为:

Invalid variance: The type parameter 'T' must be contravariantly valid on 'IDataConsumer<T>.Producer'. 'T' is covariant.
Run Code Online (Sandbox Code Playgroud)

我不确定这是怎么回事.在我看来,泛型类型通过整个接口链标记为协变,但很可能我不完全理解协方差如何工作.有人可以向我解释我做错了什么吗?

c# covariance

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

如何使用 Json 文件作为 Helm 的 Values 来源?

我有一个简单的 json 配置文件,格式如下:

{
   "applications" : [
       {
           "appName": "app1"
       },
       {
           "appName": "app2"
       }
   ]
}
Run Code Online (Sandbox Code Playgroud)

现在我有 2 个舵图定义每个应用程序的部署:

apiVersion: v1
kind: Deployment
metadata:
  name: app1
# etc, etc, etc
---
apiVersion: v1
kind: Deployment
metadata:
  name: app2
# etc, etc, etc
Run Code Online (Sandbox Code Playgroud)

我想做的是在安装时加载该 json 配置文件并使用它来生成所需的部署图表,如下所示:

# "config" holds the loaded json file
{{- range .Values.config.applications }}
apiVersion: v1
kind: Deployment
metadata:
  name: {{ .appName | quote }}
{{- end}}
Run Code Online (Sandbox Code Playgroud)

这可能吗?我在这里尝试了很多答案,但几乎所有答案都与通过配置映射将 json 文件传递​​到应用程序有关。如何在 helm 中加载 json 文件并使用图表本身中的值?请注意,其他应用程序也在使用此文件,因此我不能将其更改为 YAML 文件或类似文件。

json kubernetes-helm

2
推荐指数
1
解决办法
4516
查看次数

OpenGL:UV 值未在片段着色器中进行插值

我一直在尝试将一些旧的 OpenGL 代码转换为使用着色器,但在让片段着色器在立方体上绘制纹理时遇到了问题。然而,我看到的只是一个灰色的立方体。我已经调试了我的 .obj 加载器代码,并且我知道 UV 正在正确加载,并且我知道纹理正在从磁盘加载并正确放置在 GPU 上。经过大量测试后,我发现我的 UV 值没有在每个三角形的面上进行插值。也就是说,看起来每个片段的 uv 值都为 0.0,0.0(这是我缓冲区中的第一个 uv 值)知道为什么吗?

这是我的片段着色器:

#version 430 core

in vec3 color;
in vec2 uv;
uniform sampler2D tex;
out vec3 frag_color;

void main()
{
    //frag_color = color;
    frag_color = texture(tex,uv).rgb;
}
Run Code Online (Sandbox Code Playgroud)

还有我的顶点着色器:

#version 430 core

layout(location = 0) in vec3 pos;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec2 uv;
uniform mat4 mvMatrix;
uniform mat4 mvpMatrix;
attribute vec3 lightPos;
out vec3 color;
out vec2 uv_out;

void …
Run Code Online (Sandbox Code Playgroud)

opengl glsl texture-mapping texture2d

0
推荐指数
1
解决办法
4275
查看次数