Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Undertow 如何在云端运行中停止gVisor的下拖触发警告_Undertow_Google Cloud Run_Setsockopt_Gvisor - Fatal编程技术网

Undertow 如何在云端运行中停止gVisor的下拖触发警告

Undertow 如何在云端运行中停止gVisor的下拖触发警告,undertow,google-cloud-run,setsockopt,gvisor,Undertow,Google Cloud Run,Setsockopt,Gvisor,最近,我的Undertow应用程序正在触发Cloud Run以报告以下内容: Container Sandbox Limitation: Unsupported syscall setsockopt(0x13,0x1,0xa,0x3e05747fe5a0,0x4,0xfc1abc10). Please, refer to https://gvisor.dev/c/linux/amd64/setsockopt for more information. 我已经做了一个strace,看起来启用带外

最近,我的Undertow应用程序正在触发Cloud Run以报告以下内容:

Container Sandbox Limitation: Unsupported syscall setsockopt(0x13,0x1,0xa,0x3e05747fe5a0,0x4,0xfc1abc10). Please, refer to https://gvisor.dev/c/linux/amd64/setsockopt for more information.
我已经做了一个strace,看起来启用带外内联(SO_OOBINLINE)的套接字选项是由Undertow发送的。我已经明确告诉它不要在配置中这样做(两种方式),但它仍然在发生。将Undertow与Cloud Run结合使用似乎是一个合理的用例,但如果没有深入了解Undertow的带外内联是什么,以及为什么gVisor不支持这一点,我就无法确定哪个程序是不合理的。是因为做了其他Web服务器没有做的事情,还是因为gVisor太不成熟而无法处理这个特定的套接字功能?也许gVisor将来会支持它,而我只需要等待

def main(args:Array[String]):单位={
val服务器=Undertow.builder
.addHttpListener(“8080”、“0.0.0.0”)
.setHandler(defaultHandler)
.setSocketOption[java.lang.Boolean](xnioptions.TCP_OOB_INLINE,false)
.setWorkerOption[java.lang.Boolean](xnioptions.TCP_OOB_INLINE,false)
.建造
server.start()
}
我的回答涵盖了云运行管理中容器内的服务“监听”。我的答案不包括您的容器通过TCP、gRPC或WebSocket连接到云计算之外的Anthos或自定义应用程序。在您的问题中,您的示例是一个HTTP服务器,它是一个侦听器而不是客户机

这不是gVisor问题。第一步是了解SO_OOBINLINE的作用

如果启用此选项,则带外数据将包括在接收数据流中。否则,必须在recv()调用期间使用标志MSG_OOB来获取带外数据

现在,谁将向您发送带外(msg)数据?Google云运行管理的前端是Google前端(GFE)。这是谷歌用于云运行管理(以及许多其他谷歌服务)的代理和负载平衡器。GFE的接口是HTTP/HTTPS。客户端/浏览器无法生成带外数据。客户端连接到GFE。GFE连接到您在云运行中运行的服务

如果gVisor支持SO_OOBINLINE,谁可以发送带外数据?TCP/IP链中没有可以控制/管理的人/物

网上有一份草稿。我只是在关注这份文件。将来HTTP可能支持这一点,但现在不支持

在您的问题中,您将SO_OOBINLINE设置为false。这是默认情况(false),因此不需要将其设置为false

注意:使用OOB有几个很好的理由,但它们很少。OOB只是一个字节的数据。在HTTP世界中,如果出现问题,标准期望是一个状态代码,用于指示问题或重试情况

如何在云端运行中停止gVisor的下拖触发警告


不要调用API
setSocketOption()
和等效函数。没有办法禁用gVisor警告。

我想你的最后一句话击中了它的头部。我认为Undertow正在将其设置为false,而不管其默认值如何,这是对
setsockopt
@mgenereu子类的不必要调用,自己处理setSocketOption并将其设置为noop。它位于代码中的一些位置,并且线程化的事件序列与实际使用它的HTTP 100 Continue代码相结合,这让我开罚单。我将在StackDriver获得系统日志之前,看看是否有一个选项可以在过程中的某个时刻过滤系统日志。您是否能够解决此问题?您使用的是哪种型号的底拖?在使用
2.0.28.Final
时,我在Cloud Run中也看到了同样的错误。然而,在
Undertow.java
中,我看不到它将TCP\u OOB\u内联设置的任何地方。