• 关于

    单处理器未响应

    的搜索结果

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:47 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在检测工具抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。一些常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用以下提供了 HTTP 状态代码的完整列表。1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码说明100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。2xx(成功)用于表示服务器已成功处理相应请求的状态代码。代码说明200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 检测工具 已成功检索到该文件。201(已创建)请求成功且服务器已创建了新的资源。202(已接受)服务器已接受相应请求,但尚未对其进行处理。203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。204(无内容)服务器已成功处理相应请求,但未返回任何内容。205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。206(部分内容)服务器成功处理了部分 GET 请求。3xx(已重定向) 您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 检测工具 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 检测工具 无法抓取的网址。代码说明300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 检测工具 某个网页或网站已被永久移动到新位置。302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。304(未修改)请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 检测工具 自从上次抓取后网页没有变更,进而节省带宽和开销。305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。307(临时重定向)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 检测工具 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 检测工具 某个页面或网站已被移动。4xx(请求错误) 此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。代码说明400(错误请求)服务器不理解相应请求的语法。401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。403(已禁止)服务器正在拒绝相应请求。如果 检测工具 在尝试抓取网站的有效网页时收到此状态代码(您可在  网站站长工具中运行工具下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 检测工具 进行访问。404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在  网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 检测工具 尝试抓取的网址上看到此状态,那么这表示 检测工具 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。405(方法禁用)禁用相应请求中所指定的方法。406(不接受)无法使用相应请求的内容特性来响应请求的网页。407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。408(请求超时)服务器在等待请求时超时。409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。415(不支持的媒体类型)相应请求的格式不受请求页面的支持。416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。417(未满足期望值)服务器未满足“期望”请求标头字段的要求。5xx(服务器错误) 此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。代码说明500(服务器内部错误)服务器遇到错误,无法完成相应请求。501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。505(HTTP 版本不受支持)服务器不支持相应请求中所用的 HTTP 协议版本。  

2019-12-01 23:21:47 0 浏览量 回答数 0

问题

Nginx性能为什么如此吊

小柒2012 2019-12-01 21:20:47 15038 浏览量 回答数 3

回答

在线程中使用 System.Windows.Forms.Timer 是不能触发 Tick 事件的,为什么?如何在线程中使用定时器呢?就看本文介绍。 一. System.Windows.Forms.Timer System.Windows.Forms.Timer 要求要有UI 消息泵, 所以通常只在主线程上使用. System.Windows.Forms.Timer 用于以用户定义的事件间隔触发事件。 Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。 它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程. 且看MSDN的用法解释: 实现在用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。 二. System.Timers.Timer System.Timers.Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发 Elapsed 事件的周期性间隔。 然后可以操控此事件以提供定期处理。例如,假设您有一台关键性服务器,必须每周 7 天、每天 24 小时都保持运行。 可以创建一个使用 Timer 的服务,以定期检查服务器并确保系统开启并在运行。如果系统不响应,则该服务可以尝试重新启动服务器或通知管理员。 基于服务器的 Timer 是为在多线程环境中用于辅助线程而设计的。 服务器计时器可以在线程间移动来处理引发的 Elapsed 事件,这样就可以比 Windows 计时器更精确地按时引发事件。 有关基于服务器的计时器的更多信息,请参见“基于服务器的计时器介绍”。 在 Visual Studio 和 .NET Framework 中有三种计时器控件:基于服务器的计时器(可以在“工具箱”的“组件”选项卡上看到)、基于 Windows 的标准计时器(可以在“工具箱”的“Windows 窗体”选项卡上看到)和线程计时器(只能以编程方式使用)。 基于 Windows 的计时器从 Visual Basic 1.0 版起就存在于该产品中,并且基本上未做改动。该计时器针对在 Windows 窗体应用程序中使用而进行了优化。 基于服务器的计时器是传统的计时器为了在服务器环境上运行而优化后的更新版本。 线程计时器是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。 在 Win32 体系结构中有两种类型的线程:UI 线程和辅助线程。UI 线程绝大多数时间处于空闲状态,等待消息循环中的消息到来。 一旦接收到消息,它们就进行处理并等待下一个消息到来。另外,辅助线程用来执行后台处理而且不使用消息循环。 Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造函数中设置。 计时器的设计目的各不相同,它们的线程处理明确地指出了这一点: 1.Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。Windows 计时器的精度限定为 55 毫秒。 这些传统计时器要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。对于 COM 组件来说,这样会降低性能。 2.基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的。由于它们使用不同的体系结构,因此基于服务器的计时器可能比 Windows 计时器精确得多。 服务器计时器可以在线程之间移动来处理引发的事件。 3.对消息不在线程上发送的方案中,线程计时器是非常有用的。例如,基于 Windows 的计时器依赖于操作系统计时器的支持,如果不在线程上发送消息,与计时器相关的事件将不会发生。 在这种情况下,线程计时器就非常有用。 “答案来源于网络,供您参考” 希望以上信息可以帮到您!

牧明 2019-12-02 02:17:14 0 浏览量 回答数 0

回答

域名不能正确解析可以更换其它的dns服务器,在百度搜索“公用dns”,选一个就行了 IIS状态代码的含义 概要 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码。该状态代码记录在IIS日志中,同时也可能在Web浏览器或FTP客户端显示。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。 更多信息 日志文件的位置 在默认状态下,IIS把它的日志文件放在%WINDIR\System32\Logfiles文件夹中。每个万维网(WWW)站点和FTP站点在该目录下都有一个单独的目录。在默认状态下,每天都会在这些目录下创建日志文件,并用日期给日志文件命名(例如,exYYMMDD.log)。 HTTP 1xx-信息提示 这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。 100-继续。 101-切换协议。 2xx-成功 这类状态代码表明服务器成功地接受了客户端请求。 200-确定。客户端请求已成功。 201-已创建。 202-已接受。 203-非权威性信息。 204-无内容。 205-重置内容。 206-部分内容。 3xx-重定向 客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。 301-对象已永久移走,即永久重定向。 302-对象已临时移动。 304-未修改。 307-临时重定向。 4xx-客户端错误 发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。 401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示: 401.1-登录失败。 401.2-服务器配置导致登录失败。 401.3-由于ACL对资源的限制而未获得授权。 401.4-筛选器授权失败。 401.5-ISAPI/CGI应用程序授权失败。 401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。 403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因: 403.1-执行访问被禁止。 403.2-读访问被禁止。 403.3-写访问被禁止。 403.4-要求SSL。 403.5-要求SSL128。 403.6-IP地址被拒绝。 403.7-要求客户端证书。 403.8-站点访问被拒绝。 403.9-用户数过多。 403.10-配置无效。 403.11-密码更改。 403.12-拒绝访问映射表。 403.13-客户端证书被吊销。 403.14-拒绝目录列表。 403.15-超出客户端访问许可。 403.16-客户端证书不受信任或无效。 403.17-客户端证书已过期或尚未生效。 403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。 403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。 403.20-Passport登录失败。这个错误代码为IIS6.0所专用。 404-未找到。 404.0-(无)–没有找到文件或目录。 404.1-无法在所请求的端口上访问Web站点。 404.2-Web服务扩展锁定策略阻止本请求。 404.3-MIME映射策略阻止本请求。 405-用来访问本页面的HTTP谓词不被允许(方法不被允许) 406-客户端浏览器不接受所请求页面的MIME类型。 407-要求进行代理身份验证。 412-前提条件失败。 413–请求实体太大。 414-请求URI太长。 415–不支持的媒体类型。 416–所请求的范围无法满足。 417–执行失败。 423–锁定的错误。 5xx-服务器错误 服务器由于遇到错误而不能完成该请求。 500-内部服务器错误。 500.12-应用程序正忙于在Web服务器上重新启动。 500.13-Web服务器太忙。 500.15-不允许直接请求Global.asa。 500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。 500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。 500.100-内部ASP错误。 501-页眉值指定了未实现的配置。 502-Web服务器用作网关或代理服务器时收到了无效响应。 502.1-CGI应用程序超时。 502.2-CGI应用程序出错。application. 503-服务不可用。这个错误代码为IIS6.0所专用。 504-网关超时。 505-HTTP版本不受支持。 FTP 1xx-肯定的初步答复 这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 110重新启动标记答复。 120服务已就绪,在nnn分钟后开始。 125数据连接已打开,正在开始传输。 150文件状态正常,准备打开数据连接。 2xx-肯定的完成答复 一项操作已经成功完成。客户端可以执行新命令。200命令确定。 202未执行命令,站点上的命令过多。 211系统状态,或系统帮助答复。 212目录状态。 213文件状态。 214帮助消息。 215NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。 220服务就绪,可以执行新用户的请求。 221服务关闭控制连接。如果适当,请注销。 225数据连接打开,没有进行中的传输。 226关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。 227进入被动模式(h1,h2,h3,h4,p1,p2)。 230用户已登录,继续进行。 250请求的文件操作正确,已完成。 257已创建“PATHNAME”。 3xx-肯定的中间答复 该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。331用户名正确,需要密码。 332需要登录帐户。 350请求的文件操作正在等待进一步的信息。 4xx-瞬态否定的完成答复 该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。 425无法打开数据连接。 426Connectionclosed;transferaborted. 450未执行请求的文件操作。文件不可用(例如,文件繁忙)。 451请求的操作异常终止:正在处理本地错误。 452未执行请求的操作。系统存储空间不够。 5xx-永久性否定的完成答复 该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。 501在参数中有语法错误。 502未执行命令。 503错误的命令序列。 504未执行该参数的命令。 530未登录。 532存储文件需要帐户。 550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 551请求的操作异常终止:未知的页面类型。 552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。 553未执行请求的操作。不允许的文件名。 常见的FTP状态代码及其原因 150-FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器准备在端口20上打开新连接,发送一些数据。 226-命令在端口20上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。 230-客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。 331-客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。 426-命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。 530-该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS的配置可能拒绝匿名访问。 550-命令未被执行,因为指定的文件不可用。例如,要GET的文件并不存在,或试图将文件PUT到您没有写入权限的目录。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:01:30 0 浏览量 回答数 0

回答

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题. 软件负载   基于特定服务器软件的负载均衡   ---- 这种技术是利用网络协议的重定向功能来实现负载均衡的,例如在Http协议中支持定位指令,接收到这个指令的浏览器将自动重定向到该指令指明的另一个URL上。由于和执行服务请求相比,发送定位指令对Web服务器的负载要小得多,因此可以根据这个功能来设计一种负载均衡的服务器。一旦Web服务器认为自己的负载较大,它就不再直接发送回浏览器请求的网页,而是送回一个定位指令,让浏览器去服务器集群中的其他服务器上获得所需要的网页。在这种方式下,服务器本身必须支持这种功能,然而具体实现起来却有很多困难,例如一台服务器如何能保证它重定向过的服务器是比较空闲的,并且不会再次发送定位指令?定位指令和浏览器都没有这方面的支持能力,这样很容易在浏览器上形成一种死循环。因此这种方式实际应用当中并不多见,使用这种方式实现的服务器集群软件也较少。   DNS负载   基于DNS的负载均衡   ---- DNS负载均衡技术是最早的负载均衡解决方案,它是通过DNS服务中的随机名字解析来实现的,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。   ---- 这种技术的优点是,实现简单、实施容易、成本低、适用于大多数TCP/IP应用;但是,其缺点也非常明显,首先这种方案不是真正意义上的负载均衡,DNS服务器将Http请求平均地分配到后台的Web服务器上,而不考虑每个Web服务器当前的负载情况;如果后台的Web服务器的配置和处理能力不同,最慢的Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用;其次未考虑容错,如果后台的某台Web服务器出现故障,DNS服务器仍然会把DNS请求分配到这台故障服务器上,导致不能响应客户端。最后一点是致命的,有可能造成相当一部分客户不能享受Web服务,并且由于DNS缓存的原因,所造成的后果要持续相当长一段时间(一般DNS的刷新周期约为24小时)。所以在国外最新的建设中心Web站点方案中,已经很少采用这种方案了。 .基于四层交换技术的负载均衡   ---- 这种技术是在第四层交换机上设置Web服务的虚拟IP地址,这个虚拟IP地址是DNS服务器中解析到的Web服务器的IP地址,对客户端是可见的。当客户访问此Web应用时,客户端的Http请求会先被第四层交换机接收到,它将基于第四层交换技术实时检测后台Web服务器的负载,根据设定的算法进行快速交换。常见的算法有轮询、加权、最少连接、随机和响应时间等。   七层负载   基于七层交换技术的负载均衡   ---- 基于第七层交换的负载均衡技术主要用于实现Web应用的负载平衡和服务质量保证。它与第四层交换机比较起来有许多优势:第七层交换机不仅能检查TCP/IP数据包的TCP和UDP端口号,从而转发给后台的某台服务器来处理,而且能从会话层以上来分析Http请求的URL,根据URL的不同将不同的Http请求交给不同的服务器来处理(可以具体到某一类文件,直至某一个文件),甚至同一个URL请求可以让多个服务器来响应以分担负载(当客户访问某一个URL,发起Http请求时,它实际上要与服务器建立多个会话连接,得到多个对象,例如.txt/.gif/.jpg文档,当这些对象都下载到本地后,才组成一个完整的页面)。  

不语奈何 2020-01-09 18:27:49 0 浏览量 回答数 0

回答

1.阻塞与同步2.BIO与NIO对比3.NIO简介4.缓冲区Buffer5.通道Channel6.反应堆7.选择器8.NIO源码分析9.AIO1.阻塞与同步1)阻塞(Block)和非租塞(NonBlock):阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候阻塞:往往需要等待缞冲区中的数据准备好过后才处理其他的事情,否則一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回2)同步(Synchronization)和异步(Async)的方式:同步和异步都是基于应用程序私操作系统处理IO事件所采用的方式,比如同步:是应用程序要直接参与IO读写的操作。异步:所有的IO读写交给搡作系统去处理,应用程序只需要等待通知。同步方式在处理IO事件的时候,必须阻塞在某个方法上靣等待我们的IO事件完成(阻塞IO事件或者通过轮询IO事件的方式).对于异步来说,所有的IO读写都交给了搡作系统。这个时候,我们可以去做其他的事情,并不拓要去完成真正的IO搡作,当搡作完成IO后.会给我们的应用程序一个通知同步:阻塞到IO事件,阻塞到read成则write。这个时候我们就完全不能做自己的事情,让读写方法加入到线程里面,然后阻塞线程来实现,对线程的性能开销比较大,参考:https://blog.csdn.net/CharJay_Lin/article/details/812598802.BIO与NIO对比block IO与Non-block IO1)区别IO模型 IO NIO方式 从硬盘到内存 从内存到硬盘通信 面向流(乡村公路) 面向缓存(高速公路,多路复用技术)处理 阻塞IO(多线程) 非阻塞IO(反应堆Reactor)触发 无 选择器(轮询机制)2)面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的.NIO是面向缓冲区的。Java IO面向流意味着毎次从流中读一个成多个字节,直至读取所有字节,它们没有被缓存在任何地方,此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的教据,需要先将它缓存到一个缓冲区。Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,霱要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数裾。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。3)阻塞与非阻塞Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。4)选择器(Selector)Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择"通道:这些通里已经有可以处理的褕入,或者选择已准备写入的通道。这选怿机制,使得一个单独的线程很容易来管理多个通道。5)NIO和BIO读取文件BIO读取文件:链接BIO从一个阻塞的流中一行一行的读取数据image | left | 469x426NIO读取文件:链接通道是数据的载体,buffer是存储数据的地方,线程每次从buffer检查数据通知给通道image | left | 559x3946)处理数据的线程数NIO:一个线程管理多个连接BIO:一个线程管理一个连接3.NIO简介在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据库,按块处理要比按字节处理数据快的多。在NIO中有几个核心对象需要掌握:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。参考:链接image2.png | center | 851x3834.缓冲区Buffer缓冲区实际上是一个容器对象,更直接的说,其实就是一个数组,在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的; 在写入数据时,它也是写入到缓冲区中的;任何时候访问 NIO 中的数据,都是将它放到缓冲区中。而在面向流I/O系统中,所有数据都是直接写入或者直接将数据读取到Stream对象中。在NIO中,所有的缓冲区类型都继承于抽象类Buffer,最常用的就是ByteBuffer,对于Java中的基本类型,基本都有一个具体Buffer类型与之相对应,它们之间的继承关系如下图所示:image3.png | center | 650x3681)其中的四个属性的含义分别如下:容量(Capacity):缓冲区能够容纳的数据元素的最大数量。这一个容量在缓冲区创建时被设定,并且永远不能改变。上界(Limit):缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数。位置(Position):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新。标记(Mark):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新。2)Buffer的常见方法如下所示:flip(): 写模式转换成读模式rewind():将 position 重置为 0 ,一般用于重复读。clear() :compact(): 将未读取的数据拷贝到 buffer 的头部位。mark(): reset():mark 可以标记一个位置, reset 可以重置到该位置。Buffer 常见类型: ByteBuffer 、 MappedByteBuffer 、 CharBuffer 、 DoubleBuffer 、 FloatBuffer 、 IntBuffer 、 LongBuffer 、 ShortBuffer 。3)基本操作Buffer基础操作: 链接缓冲区分片,缓冲区分配,直接缓存区,缓存区映射,缓存区只读:链接4)缓冲区存取数据流程存数据时position会++,当停止数据读取的时候调用flip(),此时limit=position,position=0读取数据时position++,一直读取到limitclear() 清空 buffer ,准备再次被写入 (position 变成 0 , limit 变成 capacity) 。5.通道Channel通道是一个对象,通过它可以读取和写入数据,当然了所有数据都通过Buffer对象来处理。我们永远不会将字节直接写入通道中,相反是将数据写入包含一个或者多个字节的缓冲区。同样不会直接从通道中读取字节,而是将数据从通道读入缓冲区,再从缓冲区获取这个字节。image4.png | center | 368x191在NIO中,提供了多种通道对象,而所有的通道对象都实现了Channel接口。它们之间的继承关系如下图所示:image5.png | center | 650x5171)使用NIO读取数据在前面我们说过,任何时候读取数据,都不是直接从通道读取,而是从通道读取到缓冲区。所以使用NIO读取数据可以分为下面三个步骤:从FileInputStream获取Channel 创建Buffer 将数据从Channel读取到Buffer中 例子:链接 2)使用NIO写入数据使用NIO写入数据与读取数据的过程类似,同样数据不是直接写入通道,而是写入缓冲区,可以分为下面三个步骤:从FileInputStream获取Channel 创建Buffer 将数据从Channel写入到Buffer中 例子:链接 6.反应堆1)阻塞IO模型在老的IO包中,serverSocket和socket都是阻塞式的,因此一旦有大规模的并发行为,而每一个访问都会开启一个新线程。这时会有大规模的线程上下文切换操作(因为都在等待,所以资源全都被已有的线程吃掉了),这时无论是等待的线程还是正在处理的线程,响应率都会下降,并且会影响新的线程。image6.png | center | 739x3362)NIOJava NIO是在jdk1.4开始使用的,它既可以说成“新IO”,也可以说成非阻塞式I/O。下面是java NIO的工作原理:1.由一个专门的线程来处理所有的IO事件,并负责分发。2.事件驱动机制:事件到的时候触发,而不是同步的去监视事件。3.线程通讯:线程之间通过wait,notify等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。image7.png | center | 689x251注:每个线程的处理流程大概都是读取数据,解码,计算处理,编码,发送响应。7.选择器传统的 server / client 模式会基于 TPR ( Thread per Request ) .服务器会为每个客户端请求建立一个线程.由该线程单独负贵处理一个客户请求。这种模式带未的一个问题就是线程数是的剧增.大量的线程会增大服务器的开销,大多数的实现为了避免这个问题,都采用了线程池模型,并设置线程池线程的最大数量,这又带来了新的问题,如果线程池中有 200 个线程,而有 200 个用户都在进行大文件下载,会导致第 201 个用户的请求无法及时处理,即便第 201 个用户只想请求一个几 KB 大小的页面。传统的 Sorvor / Client 模式如下围所示:image8.png | center | 597x286NIO 中非阻塞IO采用了基于Reactor模式的工作方式,IO调用不会被阻塞,相反是注册感兴趣的特点IO事件,如可读数据到达,新的套接字等等,在发生持定率件时,系统再通知我们。 NlO中实现非阻塞IO的核心设计Selector,Selector就是注册各种IO事件的地方,而且当那些事件发生时,就是这个对象告诉我们所发生的事件。image9.png | center | 462x408当有读或者写等任何注册的事件发生时,可以从Selector中获得相应的SelectionKey,同时从SelectionKey中可以找到发生的事件和该事件所发生的具体的SelectableChannel,以获得客户端发送过来的数据。使用NIO中非阻塞IO编写服务器处理程序,有三个步骤1.向Selector对象注册感兴趣的事件2.从Selector中获取感兴趣的事件3.根据不同事件进行相应的处理8.NIO源码分析Selector是NIO的核心epool模型1)SelectorSelector的open()方法:链接2)ServerSocketChannelServerSocketChannel.open() 链接9.AIOAsynchronous IO异步非阻塞IOBIO ServerSocketNIO ServerSocketChannelAIO AsynchronousServerSocketChannel

wangccsy 2019-12-02 01:46:51 0 浏览量 回答数 0

问题

某政务网站性能优化

猫饭先生 2019-12-01 21:25:38 1412 浏览量 回答数 0

回答

分布式事务的解决方案有如下几种: 全局消息基于可靠消息服务的分布式事务TCC最大努力通知方案1:全局事务(DTP模型)全局事务基于DTP模型实现。DTP是由X/Open组织提出的一种分布式事务模型——X/Open Distributed Transaction Processing Reference Model。它规定了要实现分布式事务,需要三种角色: AP:Application 应用系统 它就是我们开发的业务系统,在我们开发的过程中,可以使用资源管理器提供的事务接口来实现分布式事务。 TM:Transaction Manager 事务管理器 分布式事务的实现由事务管理器来完成,它会提供分布式事务的操作接口供我们的业务系统调用。这些接口称为TX接口。事务管理器还管理着所有的资源管理器,通过它们提供的XA接口来同一调度这些资源管理器,以实现分布式事务。DTP只是一套实现分布式事务的规范,并没有定义具体如何实现分布式事务,TM可以采用2PC、3PC、Paxos等协议实现分布式事务。RM:Resource Manager 资源管理器 能够提供数据服务的对象都可以是资源管理器,比如:数据库、消息中间件、缓存等。大部分场景下,数据库即为分布式事务中的资源管理器。资源管理器能够提供单数据库的事务能力,它们通过XA接口,将本数据库的提交、回滚等能力提供给事务管理器调用,以帮助事务管理器实现分布式的事务管理。XA是DTP模型定义的接口,用于向事务管理器提供该资源管理器(该数据库)的提交、回滚等能力。DTP只是一套实现分布式事务的规范,RM具体的实现是由数据库厂商来完成的。有没有基于DTP模型的分布式事务中间件?DTP模型有啥优缺点?方案2:基于可靠消息服务的分布式事务这种实现分布式事务的方式需要通过消息中间件来实现。假设有A和B两个系统,分别可以处理任务A和任务B。此时系统A中存在一个业务流程,需要将任务A和任务B在同一个事务中处理。下面来介绍基于消息中间件来实现这种分布式事务。 title 在系统A处理任务A前,首先向消息中间件发送一条消息消息中间件收到后将该条消息持久化,但并不投递。此时下游系统B仍然不知道该条消息的存在。消息中间件持久化成功后,便向系统A返回一个确认应答;系统A收到确认应答后,则可以开始处理任务A;任务A处理完成后,向消息中间件发送Commit请求。该请求发送完成后,对系统A而言,该事务的处理过程就结束了,此时它可以处理别的任务了。 但commit消息可能会在传输途中丢失,从而消息中间件并不会向系统B投递这条消息,从而系统就会出现不一致性。这个问题由消息中间件的事务回查机制完成,下文会介绍。消息中间件收到Commit指令后,便向系统B投递该消息,从而触发任务B的执行;当任务B执行完成后,系统B向消息中间件返回一个确认应答,告诉消息中间件该消息已经成功消费,此时,这个分布式事务完成。上述过程可以得出如下几个结论: 消息中间件扮演者分布式事务协调者的角色。 系统A完成任务A后,到任务B执行完成之间,会存在一定的时间差。在这个时间差内,整个系统处于数据不一致的状态,但这短暂的不一致性是可以接受的,因为经过短暂的时间后,系统又可以保持数据一致性,满足BASE理论。 上述过程中,如果任务A处理失败,那么需要进入回滚流程,如下图所示: title 若系统A在处理任务A时失败,那么就会向消息中间件发送Rollback请求。和发送Commit请求一样,系统A发完之后便可以认为回滚已经完成,它便可以去做其他的事情。消息中间件收到回滚请求后,直接将该消息丢弃,而不投递给系统B,从而不会触发系统B的任务B。此时系统又处于一致性状态,因为任务A和任务B都没有执行。 上面所介绍的Commit和Rollback都属于理想情况,但在实际系统中,Commit和Rollback指令都有可能在传输途中丢失。那么当出现这种情况的时候,消息中间件是如何保证数据一致性呢?——答案就是超时询问机制。 title 系统A除了实现正常的业务流程外,还需提供一个事务询问的接口,供消息中间件调用。当消息中间件收到一条事务型消息后便开始计时,如果到了超时时间也没收到系统A发来的Commit或Rollback指令的话,就会主动调用系统A提供的事务询问接口询问该系统目前的状态。该接口会返回三种结果: 提交 若获得的状态是“提交”,则将该消息投递给系统B。回滚 若获得的状态是“回滚”,则直接将条消息丢弃。处理中 若获得的状态是“处理中”,则继续等待。消息中间件的超时询问机制能够防止上游系统因在传输过程中丢失Commit/Rollback指令而导致的系统不一致情况,而且能降低上游系统的阻塞时间,上游系统只要发出Commit/Rollback指令后便可以处理其他任务,无需等待确认应答。而Commit/Rollback指令丢失的情况通过超时询问机制来弥补,这样大大降低上游系统的阻塞时间,提升系统的并发度。 下面来说一说消息投递过程的可靠性保证。 当上游系统执行完任务并向消息中间件提交了Commit指令后,便可以处理其他任务了,此时它可以认为事务已经完成,接下来消息中间件一定会保证消息被下游系统成功消费掉!那么这是怎么做到的呢?这由消息中间件的投递流程来保证。 消息中间件向下游系统投递完消息后便进入阻塞等待状态,下游系统便立即进行任务的处理,任务处理完成后便向消息中间件返回应答。消息中间件收到确认应答后便认为该事务处理完毕! 如果消息在投递过程中丢失,或消息的确认应答在返回途中丢失,那么消息中间件在等待确认应答超时之后就会重新投递,直到下游消费者返回消费成功响应为止。当然,一般消息中间件可以设置消息重试的次数和时间间隔,比如:当第一次投递失败后,每隔五分钟重试一次,一共重试3次。如果重试3次之后仍然投递失败,那么这条消息就需要人工干预。 title title 有的同学可能要问:消息投递失败后为什么不回滚消息,而是不断尝试重新投递? 这就涉及到整套分布式事务系统的实现成本问题。 我们知道,当系统A将向消息中间件发送Commit指令后,它便去做别的事情了。如果此时消息投递失败,需要回滚的话,就需要让系统A事先提供回滚接口,这无疑增加了额外的开发成本,业务系统的复杂度也将提高。对于一个业务系统的设计目标是,在保证性能的前提下,最大限度地降低系统复杂度,从而能够降低系统的运维成本。 不知大家是否发现,上游系统A向消息中间件提交Commit/Rollback消息采用的是异步方式,也就是当上游系统提交完消息后便可以去做别的事情,接下来提交、回滚就完全交给消息中间件来完成,并且完全信任消息中间件,认为它一定能正确地完成事务的提交或回滚。然而,消息中间件向下游系统投递消息的过程是同步的。也就是消息中间件将消息投递给下游系统后,它会阻塞等待,等下游系统成功处理完任务返回确认应答后才取消阻塞等待。为什么这两者在设计上是不一致的呢? 首先,上游系统和消息中间件之间采用异步通信是为了提高系统并发度。业务系统直接和用户打交道,用户体验尤为重要,因此这种异步通信方式能够极大程度地降低用户等待时间。此外,异步通信相对于同步通信而言,没有了长时间的阻塞等待,因此系统的并发性也大大增加。但异步通信可能会引起Commit/Rollback指令丢失的问题,这就由消息中间件的超时询问机制来弥补。 那么,消息中间件和下游系统之间为什么要采用同步通信呢? 异步能提升系统性能,但随之会增加系统复杂度;而同步虽然降低系统并发度,但实现成本较低。因此,在对并发度要求不是很高的情况下,或者服务器资源较为充裕的情况下,我们可以选择同步来降低系统的复杂度。 我们知道,消息中间件是一个独立于业务系统的第三方中间件,它不和任何业务系统产生直接的耦合,它也不和用户产生直接的关联,它一般部署在独立的服务器集群上,具有良好的可扩展性,所以不必太过于担心它的性能,如果处理速度无法满足我们的要求,可以增加机器来解决。而且,即使消息中间件处理速度有一定的延迟那也是可以接受的,因为前面所介绍的BASE理论就告诉我们了,我们追求的是最终一致性,而非实时一致性,因此消息中间件产生的时延导致事务短暂的不一致是可以接受的。 方案3:最大努力通知(定期校对)最大努力通知也被称为定期校对,其实在方案二中已经包含,这里再单独介绍,主要是为了知识体系的完整性。这种方案也需要消息中间件的参与,其过程如下: title 上游系统在完成任务后,向消息中间件同步地发送一条消息,确保消息中间件成功持久化这条消息,然后上游系统可以去做别的事情了;消息中间件收到消息后负责将该消息同步投递给相应的下游系统,并触发下游系统的任务执行;当下游系统处理成功后,向消息中间件反馈确认应答,消息中间件便可以将该条消息删除,从而该事务完成。上面是一个理想化的过程,但在实际场景中,往往会出现如下几种意外情况: 消息中间件向下游系统投递消息失败上游系统向消息中间件发送消息失败对于第一种情况,消息中间件具有重试机制,我们可以在消息中间件中设置消息的重试次数和重试时间间隔,对于网络不稳定导致的消息投递失败的情况,往往重试几次后消息便可以成功投递,如果超过了重试的上限仍然投递失败,那么消息中间件不再投递该消息,而是记录在失败消息表中,消息中间件需要提供失败消息的查询接口,下游系统会定期查询失败消息,并将其消费,这就是所谓的“定期校对”。 如果重复投递和定期校对都不能解决问题,往往是因为下游系统出现了严重的错误,此时就需要人工干预。 对于第二种情况,需要在上游系统中建立消息重发机制。可以在上游系统建立一张本地消息表,并将 任务处理过程 和 向本地消息表中插入消息 这两个步骤放在一个本地事务中完成。如果向本地消息表插入消息失败,那么就会触发回滚,之前的任务处理结果就会被取消。如果这量步都执行成功,那么该本地事务就完成了。接下来会有一个专门的消息发送者不断地发送本地消息表中的消息,如果发送失败它会返回重试。当然,也要给消息发送者设置重试的上限,一般而言,达到重试上限仍然发送失败,那就意味着消息中间件出现严重的问题,此时也只有人工干预才能解决问题。 对于不支持事务型消息的消息中间件,如果要实现分布式事务的话,就可以采用这种方式。它能够通过重试机制+定期校对实现分布式事务,但相比于第二种方案,它达到数据一致性的周期较长,而且还需要在上游系统中实现消息重试发布机制,以确保消息成功发布给消息中间件,这无疑增加了业务系统的开发成本,使得业务系统不够纯粹,并且这些额外的业务逻辑无疑会占用业务系统的硬件资源,从而影响性能。 因此,尽量选择支持事务型消息的消息中间件来实现分布式事务,如RocketMQ。 方案4:TCC(两阶段型、补偿型)TCC即为Try Confirm Cancel,它属于补偿型分布式事务。顾名思义,TCC实现分布式事务一共有三个步骤: Try:尝试待执行的业务 这个过程并未执行业务,只是完成所有业务的一致性检查,并预留好执行所需的全部资源Confirm:执行业务 这个过程真正开始执行业务,由于Try阶段已经完成了一致性检查,因此本过程直接执行,而不做任何检查。并且在执行的过程中,会使用到Try阶段预留的业务资源。Cancel:取消执行的业务 若业务执行失败,则进入Cancel阶段,它会释放所有占用的业务资源,并回滚Confirm阶段执行的操作。下面以一个转账的例子来解释下TCC实现分布式事务的过程。 假设用户A用他的账户余额给用户B发一个100元的红包,并且余额系统和红包系统是两个独立的系统。 Try 创建一条转账流水,并将流水的状态设为交易中将用户A的账户中扣除100元(预留业务资源)Try成功之后,便进入Confirm阶段Try过程发生任何异常,均进入Cancel阶段Confirm 向B用户的红包账户中增加100元将流水的状态设为交易已完成Confirm过程发生任何异常,均进入Cancel阶段Confirm过程执行成功,则该事务结束Cancel 将用户A的账户增加100元将流水的状态设为交易失败在传统事务机制中,业务逻辑的执行和事务的处理,是在不同的阶段由不同的部件来完成的:业务逻辑部分访问资源实现数据存储,其处理是由业务系统负责;事务处理部分通过协调资源管理器以实现事务管理,其处理由事务管理器来负责。二者没有太多交互的地方,所以,传统事务管理器的事务处理逻辑,仅需要着眼于事务完成(commit/rollback)阶段,而不必关注业务执行阶段。 TCC全局事务必须基于RM本地事务来实现全局事务TCC服务是由Try/Confirm/Cancel业务构成的, 其Try/Confirm/Cancel业务在执行时,会访问资源管理器(Resource Manager,下文简称RM)来存取数据。这些存取操作,必须要参与RM本地事务,以使其更改的数据要么都commit,要么都rollback。 这一点不难理解,考虑一下如下场景: title 假设图中的服务B没有基于RM本地事务(以RDBS为例,可通过设置auto-commit为true来模拟),那么一旦[B:Try]操作中途执行失败,TCC事务框架后续决定回滚全局事务时,该[B:Cancel]则需要判断[B:Try]中哪些操作已经写到DB、哪些操作还没有写到DB:假设[B:Try]业务有5个写库操作,[B:Cancel]业务则需要逐个判断这5个操作是否生效,并将生效的操作执行反向操作。 不幸的是,由于[B:Cancel]业务也有n(0<=n<=5)个反向的写库操作,此时一旦[B:Cancel]也中途出错,则后续的[B:Cancel]执行任务更加繁重。因为,相比第一次[B:Cancel]操作,后续的[B:Cancel]操作还需要判断先前的[B:Cancel]操作的n(0<=n<=5)个写库中哪几个已经执行、哪几个还没有执行,这就涉及到了幂等性问题。而对幂等性的保障,又很可能还需要涉及额外的写库操作,该写库操作又会因为没有RM本地事务的支持而存在类似问题。。。可想而知,如果不基于RM本地事务,TCC事务框架是无法有效的管理TCC全局事务的。 反之,基于RM本地事务的TCC事务,这种情况则会很容易处理:[B:Try]操作中途执行失败,TCC事务框架将其参与RM本地事务直接rollback即可。后续TCC事务框架决定回滚全局事务时,在知道“[B:Try]操作涉及的RM本地事务已经rollback”的情况下,根本无需执行[B:Cancel]操作。 换句话说,基于RM本地事务实现TCC事务框架时,一个TCC型服务的cancel业务要么执行,要么不执行,不需要考虑部分执行的情况。 TCC事务框架应该提供Confirm/Cancel服务的幂等性保障一般认为,服务的幂等性,是指针对同一个服务的多次(n>1)请求和对它的单次(n=1)请求,二者具有相同的副作用。 在TCC事务模型中,Confirm/Cancel业务可能会被重复调用,其原因很多。比如,全局事务在提交/回滚时会调用各TCC服务的Confirm/Cancel业务逻辑。执行这些Confirm/Cancel业务时,可能会出现如网络中断的故障而使得全局事务不能完成。因此,故障恢复机制后续仍然会重新提交/回滚这些未完成的全局事务,这样就会再次调用参与该全局事务的各TCC服务的Confirm/Cancel业务逻辑。 既然Confirm/Cancel业务可能会被多次调用,就需要保障其幂等性。 那么,应该由TCC事务框架来提供幂等性保障?还是应该由业务系统自行来保障幂等性呢? 个人认为,应该是由TCC事务框架来提供幂等性保障。如果仅仅只是极个别服务存在这个问题的话,那么由业务系统来负责也是可以的;然而,这是一类公共问题,毫无疑问,所有TCC服务的Confirm/Cancel业务存在幂等性问题。TCC服务的公共问题应该由TCC事务框架来解决;而且,考虑一下由业务系统来负责幂等性需要考虑的问题,就会发现,这无疑增大了业务系统的复杂度。

1210119897362579 2019-12-02 00:14:25 0 浏览量 回答数 0

问题

优客服开源客服系统通信功能介绍 1.1   优客服功能? 400 报错

爱吃鱼的程序员 2020-06-03 16:49:27 2 浏览量 回答数 1

回答

Java之JVM垃圾回收 内存结构以及垃圾回收算法前言:由于小组技术分享的需要,懂的不是很多所以我就找了这个我自己感兴趣的知识点给大家做个简单的介绍。由于是新人,算不了很懂,只是总结性的讲了些概念性的东西。给大家分享的同时,算是给自己做个笔记吧。作为Java语言的核心之一,JVM垃圾回收帮我们解决了让我们很头疼的垃圾回收问题。我们不需要像VC++一样,作为内存管理的统治者需要我们对我们分配的每一块内存进行回收,否则就会造成内存泄露问题。是不是只要有JVM存在我们就不会出现内存泄露问题,出现内存泄露问题我们又该怎么办,如果我们想提高我们程序的稳定性和其他性能我们能从什么地方下手!!!相信这些问题是我们程序过程中不可逾越的。了解JVM的内存分配及其相应的垃圾回收机制,不仅仅是可以了解底层的JVM运行机制,而且对于程序性能的优化和提升还是很有必要的。一、JVM内存分配区域结构图一从图一可以看出JVM中的内存分配包括PC Register(PC寄存器) JVM栈 堆(Heap) 方法区域(MethodArea)运行时常量池(RuntimeConstant Pool) 本地方法堆栈(NativeMethod Stacks),这几部分区域但是从程序员的角度来看我们只关注JVM Heap和JVM Stack,因为这两部分是直接关系程序运行期间的内存状态,所以我会主要介绍这两部分内存,其他的我只是给出了简单的一些概念性解释:PC Register(Program Counter 寄存器):主要作用是记录当前线程所执行的字节码的行号。方法区域(MethodArea):方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,法区域也是全局共享的,它在虚拟机启动时在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。运行时常量池(RuntimeConstant Pool):存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。本地方法堆栈(NativeMethod Stacks):JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。JVM栈:主要存放一些基本类型的变量和对象的引用变量。JVM堆:用来存放由 new 创建的对象和数组Java 虚拟机的自动垃圾回收器来管理(注意数组也是对象,所以说数组也是存放在JVM堆中)。由于栈中存放的是主要存放一些基本类型的变量和对象的引用变量,所以当过了变量的作用区域或者是当程序运行结束后它所占用的内存会自动的释放掉,所以不用来关心,下面我们主要来说的是堆内存的分配以及回收的算法。二、JVM堆内存介绍工欲善其事,必先利其器。所以了解堆内存的内部结构是很必要的。在Jvm中堆空间划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。年轻带主要是动态的存储,年轻带主要储存新产生的对象,年老代储存年龄大些的对象,永久带主要是存储的是java的类信息,包括解析得到的方法、属性、字段等。永久带基本不参与垃圾回收。所以说我们说的垃圾回收主要是针对年轻代和年老代。图二年轻代又分成3个部分,一个eden区和两个相同的survior区。刚开始创建的对象都是放置在eden区的。分成这样3个部分,主要是为了生命周期短的对象尽量留在年轻带。当eden区申请不到空间的时候,进行minorGC,把存活的对象拷贝到survior。年老代主要存放生命周期比较长的对象,比如缓存对象。(经过IBM的一个研究机构研究数据表明,基本上80%-98%的对象都会在年轻代的Eden区死掉从而本回收掉,所以说真正进入到老年代的对象很少,这也是为什么MinorGC比MajorGC更加频繁的原因)具体JVM内存垃圾回收过程描述如下 :1、对象在Eden区完成内存分配2、当Eden区满了,再创建对象,会因为申请不到空间,触发minorGC,进行young(eden+1survivor)区的垃圾回收3、minorGC时,Eden不能被回收的对象被放入到空的survivor(Eden肯定会被清空),另一个survivor里不能被GC回收的对象也会被放入这个survivor,始终保证一个survivor是空的4、当做第3步的时候,如果发现survivor满了,则这些对象被copy到old区,或者survivor并没有满,但是有些对象已经足够Old,也被放入Old区 XX:MaxTenuringThreshold5、当Old区被放满的之后,进行fullGC补充: MinorGC:年轻代所进行的垃圾回收,非常频繁,一般回收速度也比较快。 MajorGC:老年代进行的垃圾回收,发生一次MajorGC至少伴随一次MinorGC,一般比MinorGC速度慢十倍以上。 FullGC:整个堆内存进行的垃圾回收,很多时候是MajorGC 以后就是堆内存结构已经大致的垃圾回收过程。三、对象分配原则1.对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。2.大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。3.长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值对象进入老年区。4.动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。5.空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。四、垃圾收集器作为JVM中的核心之一垃圾收集器,主要完成的功能包括:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。所以说我们在实现垃圾收集器的同时就要实现两个算法一个是发现无用的对象第二就是回收该对象的内存。收集器主要分为引用计数器和跟踪收集器两种,Sun JDK中采用跟踪收集器作为GC实现策略。发现无用对象只要的实现算法包括引用计数法和根搜索算法,引用计数法主要是JVM的早期实现方法,因为引用计数无法解决循环引用的问题,所以现在JVM实现的主要是根搜索算法,引用计数法:堆中的每个对象对应一个引用计数器。当每一次创建一个对象并赋给一个变量时,引用计数器置为1。当对象被赋给任意变量时,引用计数器每次加1当对象出了作用域后(该对象丢弃不再使用),引用计数器减1,一旦引用计数器为0,对象就不可用从而可以被回收。 根搜索算法:通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。目前的收集器主要有三种:串行收集器:使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高并行收集器:对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间。一般在多线程多处理器机器上使用并发收集器:可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少的时间,此收集器适合对响应时间要求比较高的中、大规模应用五、垃圾收集器的回收算法Copying算法:算法:复制采用的方式为从根集合扫描出存活的对象,并将找到的存活对象复制到一块新的完全未使用的空间中。 过程: 此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不过出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。Mark-Sweep算法: 算法:标记-清除采用的方式为从根集合开始扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未标记的对象,并进行回收。 过程: 第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。它停止所有工作,收集器从根开始访问每一个活跃的节点,标记它所访问的每一个节点。走过所有引用后,收集就完成了,然后就对堆进行清除(即对堆中的每一个对象进行检查),所有没有标记的对象都作为垃圾回收并返回空闲列表。Mark-Compact算法: 算法:标记阶段与“Mark-Sweep”算法相同,但在清除阶段有所不同。在回收不存活对象所占用的内存空间后,会将其他所有存活对象都往左端空闲的空间进行移动,并更新引用其对象指针。过程:此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。Sun JDK GC策略:新生代算法实现:Copying,Copying,Copying旧生代算发实现:Mark-Sweep-Compact,Mark –Compact,Mark –Sweep!!六、JvisuaVM 工具如果我们想优化自己的程序,那么我们就必须清楚的了解不同代码程序所消耗的性能多少,作为JDK的一部分,这个工具给我们提供了很大的帮助。这个工具可以在JDK的bin目录下找到,功能很强大,可以注意利用

auto_answer 2019-12-02 01:56:35 0 浏览量 回答数 0

问题

最大限度利用 JavaScript 和 Ajax 性能:报错

kun坤 2020-06-05 22:56:50 0 浏览量 回答数 1

回答

更换服务器~100个是单服务器最大的负荷了你用的是镶嵌式的,要选择服务器机组的那种~刀片式服务器~然后oracl数据库支持分开安装。同步处理~ 你肯定买的是架式服务器~######装ORACLE服务器是刀片式的,6核至强 24G的内存 应该不是服务器瓶颈######oracl装在独立的一台服务器上的话,只支持小形企业和地、市级企业运行 你说的情况,可以理解你的数据量非常庞大,,有可能是省、国家级的数据量了~~ 让你单位给你单独开个服务器房间,更换服务器机柜然后购买刀片式服务器做服务器阵列机组~######数据量倒不会太大,一天1G不到,问题是很多存储过程的逻辑很复杂,一条线程调用存储过程,要等待很久才会返回,直接导致工作线程速度很慢,数据进入速度太快,工作异常状态频繁出现。######必须要实时的存入数据库吗?不能先缓存到服务器,然后让服务器慢慢去处理吗?或者直接将数据记入日志,然后sqlload?######回复 @xinzaibing : 我想到一个蛋疼的方式:数据写文件,文件内容定期入库,程序定期读取数据库计算的结果缓存到内存中。不知道你具体需求,瞎琢磨一个。######回复 @asdfsx : 公司领导一致认为内存不可靠,断电、程序异常什么的...存在内存的数据就没了...真是蛋疼啊######回复 @xinzaibing : 如果数据量不大的话,还有一个方案就是都保存在内存里,然后定时把内存里的结果同步到数据库里。数据库的逻辑挪到程序里..........这个方案比较累啊。另外就是缓存可以加个优先级高低的判断。######目前要求是必须要实时入库,采取写日志文件的方法也可以。 这些数据有一个特点,在某一个时刻会有一个突然出现的峰值,然后又慢慢变少,但是这个时间是不固定的,由于只实用了一条双缓冲队列,所有需要紧急处理的数据和非紧急处理的数据都在队列里,而如果遇到非紧急数据,处理了很长的时间,就直接导致后面的紧急数据失效了...或者导致嵌入式程序判断服务端未收到数据,进而采取重发,导致一条队列里有非常多重复的数据。######我可能会使用数据写入日志文件,然后定时将日志入库的办法操作######大概意思可能是多线程对数据库表的操作导致数据表锁定,性能损失在内耗上了。。那数据表采用行级锁呢?(这样会增大系统开销)我是菜鸟,求教  ######回复 @xinzaibing : 这个应该是属于最初的设计问题,hohoho######回复 @asdfsx : 目前我也在往这方面考虑,如果数据分类处理。那就得大改结构了...唉######回复 @xinzaibing : 建议根据上传的不同数据进行不同的处理,不要一股脑的都放在缓存中,如果是心跳的话,应该立即响应,如果是要处理的数据的话,才需要进行缓存等待处理######ORACLE默认就是行级锁的应该.. 主要是数据的写入速度远远小于数据上传的速度,导致了缓存溢出,紧急数据不能得到及时处理,大量数据出现超时失效,无法对嵌入式的采集器程序作出及时的心跳相应和其他回复(因为都在队列中,无法处理,无心跳的话嵌入式采集器会误认为服务器断线)。最终导致单台服务器接入数据的嵌入式设备的数量太少,不满足需求。######去年刚毕业,由于公司小,一个人搞后台,压力太大啊...大家指指招呗~ @中山野鬼######今天到图书馆看了一本书《让Orcale跑的更快点》,上面说可以从如下几个方面优化: 数据库方面:建适当的索引,固定长度;查询条件比较尽量简化;不同的表放在不同的磁盘里…… 服务层:增大缓存,(有没有数据库连接池不知道你能用上不) 软件层:对Java使用PaperStatement 囫囵吞枣就记得这么多了。。。哭~~######非常感谢...我去看看这本书 :)######我不清楚你的数据采集的内容是什么。不过看的出,对实时性要求高。换我,基本上就一个思路。 1、做个前段服务器,什么事情都不干,只进行数据的压缩。然后所有数据库和计算操作,放到后端。 至于并发,你这种 1W=100台服务器的方式治标不治本。######@中山野鬼 是说对数据进行预处理,提取有效内容?还是就是zip?######回复 @asdfsx : 不一样的。而是数据压缩。采样数据中间,信息密度不会太大的。######老鬼的思路有点像我说的那个数据写日志文件,或者内存缓存定时入库...........都被否定了啊######@xinzaibing 还有一个建议,上传的数据加一个验证,如果上传的数据已经插入缓存,就不要再次插入了。无脑插入插到崩也不是什么好主意啊######回复 @asdfsx : 要回复的,要处理成功后才回复,存库失败或者某些异常导致服务端崩溃重启,就不进行回复,客户端会持续地进行重发,重发到一定次数后,存本地,等恢复正常后发送存本地的数据

kun坤 2020-06-09 11:56:38 0 浏览量 回答数 0

问题

ECS Windows 系统 SVCHOST.EXE进程占用资源(CPU,内存)较高的处理是什么

boxti 2019-12-01 22:06:56 2057 浏览量 回答数 0

回答

问题定位方法  可以尝试通过如下方法定位出占用过高系统资源的具体程序或服务。 方法1. 使用任务管理器做简要分析  打开系统自带的【任务管理器】,快速判断出相应svchost进程下挂载的对应服务: a)     通过右键单击任务栏,然后单击“启动任务管理器”,打开“任务管理器”。 b)     切换到“进程”选项卡。 c)     单击“显示所有用户的进程”,若系统提示您输入管理员密码或进行确认,请键入该密码或提供确认。 d)     右键单击资源使用过高的 svchost.exe实例,然后单击“转到服务”按钮,与进程关联的服务将在“服务”选项卡上突出显示。         方法2 使用SC Config命令隔离服务 此外,在找到CPU占用高的Svchost之后,也可以尝试通过SC Config命令将svchost中驻存的服务“独立”出来到单独的svchost中运行,请参考微软官方博客文章。 Getting Started with SVCHOST.EXE Troubleshooting How to troubleshoot Service Host (svchost.exe) related problems? 例如,客户遇到高CPU的情况,定位下来发现是svchost占用CPU较高。通过tasklist命令发现对应的svchost进程中有多个服务驻存。 tasklist /svc 通过Sc config 命令我们可以将这些服务独立出来运行到单独的svchost进程中 sc config wuauserver type= own 执行成功后重启机器, 发现Windows Update服务已经成功独立 随后,经过监控发现确实是Windows Update的服务消耗CPU较高,后续响应的调整Windows Update策略晚上进行更新,避免工作时间影响服务器业务的运行。 如果恢复该服务与其它服务一起驻存到相同svchost中,请执行如下命令后重启生效。 sc config wuauserv type= share 方法3. 使用procexp做深入分析 通过任务管理器只能定位出相应svchost进程下挂载的服务,但无法查看具体是哪个服务占用了过高的系统资源。 使用微软官方Sysinternals Suite安全组件包中的procexp工具,可以做进一步的排查分析,定位出具体占用过高系统资源的服务、进程和关联文件等。 a)     到官方下载procexp 。 b)     打开procexp,如下图所示,将鼠标指向占用资源异常的svchost进程,气泡提示框就会相应显示出该svchost进程下挂载的相应服务。 c)     双击相应的svchost,弹出的进程属性对话框。 d)     切换到“Services“选项卡,也同样能查看到相应svchost进程下挂载的相关服务。并能对相应服务进行权限设置、停止、重启、暂停等快捷操作。 e)     切换到“Threads“选项卡,能看到相应svchost进程下占用最高资源的线程的CPU使用率和归属的服务。 f)      确定了相应服务或者线程归属动态链接库文件后,用户再做相应的处理即可。 阅读须知 本文仅供用户使用 ECS Windows 时参考,文中引用的微软官方链接,版权归属微软。请注意文章适用的操作系统范围,以及微软 Windows 产品迭代或者文档未及时更新可能带来的问题,阿里云官方不对引用的微软官方链接内容负责。 如果您对文档内容有疑问或认为文档内容有误,请及时通过文档下方的评价板块反馈给我们,我们将酌情改进修正。

KB小秘书 2019-12-02 01:28:11 0 浏览量 回答数 0

问题

SSH面试题

琴瑟 2019-12-01 21:46:22 3489 浏览量 回答数 0

回答

在Logstore列表页面单击诊断可以查看当前Logstore的所有日志采集报错,本文档介绍具体报错类型及对应的处理方式。 若您遇到其他问题,请提交工单处理。 错误类型 错误说明 处理方式 LOGFILE_PERMINSSION_ALARM Logtail无权限读取指定文件。 检查服务器Logtail的启动账户,建议以root方式启动。 SPLIT_LOG_FAIL_ALARM 行首正则与日志行首匹配失败,无法对日志做分行。 检查行首正则正确性,如果是单行日志可以配置为.*。 MULTI_CONFIG_MATCH_ALARM 同一个文件,只能被一个Logtail的配置收集,不支持同时被多个Logtail配置收集。 说明 Docker标准输出可以被多个Logtail配置采集。 检查一个文件是否在多个配置中被收集,并删除多余的配置。 REGEX_MATCH_ALARM 正则表达式解析模式下,日志内容和正则表达式不匹配。 复制错误内容中的日志样例重新尝试匹配,并生成新的解析正则式。 PARSE_LOG_FAIL_ALARM JSON、分隔符等解析模式下,由于日志格式不符合定义而解析失败。 请单击错误信息,查看匹配失败的详细报错。 CATEGORY_CONFIG_ALARM Logtail采集配置不合法。 常见的错误为正则表达式提取文件路径作为Topic失败,其它错误请提工单解决。 LOGTAIL_CRASH_ALARM Logtail因超过服务器资源使用上限而崩溃。 请参考配置启动参数修改CPU、内存使用上限,如有疑问请提工单。 REGISTER_INOTIFY_FAIL_ALARM Linux下注册日志监听失败,可能由于没有文件夹权限或文件夹被删除。 检查Logtail是否有权限访问该文件夹或该文件夹是否被删除。 DISCARD_DATA_ALARM 配置Logtail使用的CPU资源不够或网络发送流控。 请参考配置启动参数修改CPU使用上限或网络发送并发限制,如有疑问请提工单解决。 SEND_DATA_FAIL_ALARM 主账号未创建任何AccessKey。 Logtail客户端机器与日志服务的服务器端无法连通或者网络链路质量较差。 服务器端写入配额不足。 主账号创建AK。 检查本地配置文件/usr/local/ilogtail/ilogtail_config.json,执行curl <服务器地址>,查看是否有内容返回。 为Logstore增加Shard数目,以支持更大数据量的写入。 REGISTER_INOTIFY_FAIL_ALARM Logtail为日志目录注册的inotify watcher失败。 请检查目录是否存在以及目录权限设置。 SEND_QUOTA_EXCEED_ALARM 日志写入流量超出限制。 在控制台扩容分区。 READ_LOG_DELAY_ALARM 日志采集进度落后于日志产生进度,一般是由于配置Logtail使用的CPU资源不够或是网络发送流控导致。 请参考Logtail配置启动参数修改CPU使用上限或网络发送并发限制,如有疑问请提工单。 DROP_LOG_ALARM 日志采集进度落后于日志产生进度,且未处理的日志轮转超过20个,一般是由于配置Logtail使用的CPU资源不够或是网络发送流控导致。 请参考Logtail配置启动参数修改CPU使用上限或网络发送并发限制,如有疑问请提工单。 LOGDIR_PERMINSSION_ALARM 没有日志监控目录读取权限。 请检查日志监控目录是否存在,若存在请检查目录权限设置。 ENCODING_CONVERT_ALARM 编码转换失败。 请检查日志编码格式配置是否与日志编码格式一致。 OUTDATED_LOG_ALARM 过期的日志,日志时间落后超过12小时。可能原因: 日志解析进度落后超过12小时。 用户自定义时间字段配置错误。 日志记录程序时间输出异常。 查看是否存在READ_LOG_DELAY_ALARM。如存在按照READ_LOG_DELAY_ALARM处理方式解决,若不存在请检查时间字段配置。 检查时间字段配置。若时间字段配置正确,请检查日志记录程序时间输出是否正常。 如有疑问请提工单。 STAT_LIMIT_ALARM 日志采集配置目录中的文件数超限。 检查采集配置目录是否有较多的文件和子目录,合理设置监控的根目录和目录最大监控深度。 DROP_DATA_ALARM 进程退出时日志落盘到本地超时,此时会丢弃未落盘完毕的日志。 该报错通常为采集严重阻塞导致,请参考Logtail配置启动参数修改CPU使用上限或网络发送并发限制,如有疑问请提工单。 INPUT_COLLECT_ALARM 输入源采集异常。 请参考错误提示处理。 HTTP_LOAD_ADDRESS_ALARM http输入的address不合法。 请检查address合法性。 HTTP_COLLECT_ALARM http采集异常。 请根据错误提示排查,一般由于超时导致。 FILTER_INIT_ALARM 过滤器初始化异常。 一般由于过滤器的正则表达式非法导致,请根据提示修复。 INPUT_CANAL_ALARM MySQL binlog运行异常。 请根据错误提示排查。在配置更新时canal服务可能重启,服务重启的错误可以忽略。 CANAL_INVALID_ALARM MySQL binlog内部状态异常。 此错误一般由于运行时表的schema信息变更导致meta不一致,请确认报错期间是否在修改表的schema。其他情况请提工单。 MYSQL_INIT_ALARM MySQL初始化异常。 请参考错误提示处理。 MYSQL_CHECKPOING_ALARM MySQL checkpoint格式异常。 请确认是否修改该配置中的checkpoint相关配置,其他情况请提工单。 MYSQL_TIMEOUT_ALARM MySQL查询超时。 请确认MySQL服务器和网络是否异常。 MYSQL_PARSE_ALARM MySQL查询结果解析失败。 请确认MySQL配置的checkpoint格式是否匹配对应字段的格式。 AGGREGATOR_ADD_ALARM 向队列中添加数据失败。 这种情况是由于数据发送过快,若真实数据量很大,则无需关心。 ANCHOR_FIND_ALARM anchor插件错误、配置错误或存在不符合配置的日志。 请单击错误查看详细报错,报错根据内容分为以下几类,请根据详细报错中的信息,检查相应的配置是否存在问题。 anchor cannot find key:配置中指定了SourceKey但日志中不存在对应的字段。 anchor no start:无法从SourceKey的值中找到Start对应的内容。 anchor no stop:无法从 SourceKey 的值中找到Stop对应的内容。 ANCHOR_JSON_ALARM anchor插件错误,对已配置的Start和Stop所确定的内容执行JSON展开时发生错误。 请单击错误查看详细报错,检查所处理的内容以及相关的配置,确定是否有配置错误或不合法日志。 CANAL_RUNTIME_ALARM binlog插件运行时错误。 请单击错误查看详细报错,根据错误信息进行进一步地排查,错误一般与所连接的MySQL master相关。 CHECKPOINT_INVALID_ALARM 插件内Checkpoint解析失败。 请单击错误查看详细报错,根据其中的检查点键、检查点内容(前 1024 个字节)以及具体的错误信息进行进一步排查。 DIR_EXCEED_LIMIT_ALARM Logtail同时监听的目录数超出限制。 检查当前Logstore的采集配置以及该Logtail上应用的其他配置是否会包含较多的目录数,合理设置监控的根目录和目录最大监控深度。 DOCKER_FILE_MAPPING_ALARM 执行Logtail命令添加Docker文件映射失败。 请单击错误查看详细报错,根据其中的命令以及具体的错误信息进行进一步排查。 DOCKER_FILE_MATCH_ALARM 无法在Docker容器中查找到指定文件。 请单击错误查看详细报错,根据其中的容器信息以及查找的文件路径进行进一步排查。 DOCKER_REGEX_COMPILE_ALARM docker stdout插件错误,根据配置中的BeginLineRegex构建正则表达式失败。 请单击错误查看详细报错,检查其中的正则表达式是否正确。 DOCKER_STDOUT_INIT_ALARM docker stdout采集初始化失败。 请单击错误查看详细报错,报错根据内容分为以下几类: host...version...error:请检查配置中指定的Docker engine是否可访问。 load checkpoint error:加载检查点失败,如无影响可忽略此错误。 container...:指定容器存在非法label值,目前仅允许配置stdout和stderr。请结合详细错误进行检查。 DOCKER_STDOUT_START_ALARM Docker stdout初始化采集时,stdout文件大小超过限制。 一般由于首次采集时stdout文件已存在,可忽略。 DOCKER_STDOUT_STAT_ALARM Docker stdout无法检查到stdout文件。 一般由于容器退出时无法访问到文件,可忽略。 FILE_READER_EXCEED_ALARM Logtail同时打开的文件对象数量超过限制。 一般由于当前处于采集状态的文件数过多,请检查采集配置是否合理。 GEOIP_ALARM geoip插件错误。 请单击错误查看详细报错,报错根据内容分为以下几类: invalid ip...:获取IP地址失败,请检查配置中的 SourceKey 是否正确或是否存在不合法日志。 parse ip...:根据IP地址解析城市失败,请查看详细错误信息进行排查。 cannot find key...:无法从日志中查看到指定的SourceKey,请检查配置是否正确或是否存在不合法日志。 HTTP_INIT_ALARM http插件错误,配置中指定的ResponseStringMatch正则表达式编译错误。 请单击错误查看详细报错,检查其中的正则表达式是否正确。 HTTP_PARSE_ALARM http插件错误,获取HTTP响应失败。 请单击错误查看详细报错,根据其中的具体错误信息对配置内容或所请求的HTTP服务器进行检查。 INIT_CHECKPOINT_ALARM binlog插件错误,加载检查点失败,插件将忽略检查点并从头开始处理。 请单击错误查看详细报错,根据其中的具体错误信息来确定是否可忽略此错误。 LOAD_LOCAL_EVENT_ALARM Logtail执行了本地事件处理。 此警告一般不会出现,如果非人为操作引起此警告,才需要进行错误排查。请单击错误查看详细报错,根据其中的文件名、配置名、project、logstore等信息进行进一步地排查。 LOG_REGEX_FIND_ALARM processor_split_log_regex以及 processor_split_log_string插件错误,无法从日志中获取到配置中指定的 SplitKey。 请单击错误查看详细报错,检查是否存在配置错误的情况。 LUMBER_CONNECTION_ALARM service_lumberjack插件错误,停止插件时关闭服务器错误。 请单击错误查看详细报错,根据其中的具体错误信息进行进一步排查,此错误一般可忽略。 LUMBER_LISTEN_ALARM service_lumberjack插件错误,初始化进行监听时发生错误。 请单击错误查看详细报错,报错根据内容分为以下几类: init tls error...:请结合具体的错误信息检查 TLS 相关的配置是否正确 listen init error...:请结合具体的错误信息检查地址相关的配置是否正确。 LZ4_COMPRESS_FAIL_ALARM Logtail执行LZ4压缩发生错误。 请单击错误查看详细报错,根据其中的log lines、project、category、region等值来进行进一步排查。 MYSQL_CHECKPOINT_ALARM MySQL插件错误,检查点相关错误。 请单击错误查看详细报错,报错根据内容分为以下几类: init checkpoint error...:初始化检查点失败,请根据错误信息检查配置指定的检查点列以及所获取的值是否正确。 not matched checkpoint...:检查点信息不匹配,请根据错误信息检查是否是由于配置更新等人为原因导致的错误,如果是则可忽略。 NGINX_STATUS_COLLECT_ALARM nginx_status插件错误,获取状态发生错误。 请单击错误查看详细报错,根据其中的URL以及具体的错误信息来进行进一步排查。 NGINX_STATUS_INIT_ALARM nginx_status插件错误,初始化解析配置中指定的URL失败。 请单击错误查看详细报错,根据其中的URL检查地址是否正确配置。 OPEN_FILE_LIMIT_ALARM Logtail已打开文件数量超过限制,无法打开新的文件。 请单击错误查看详细报错,根据其中的日志文件路径、Project、Logstore等信息进行进一步排查。 OPEN_LOGFILE_FAIL_ALARM Logtail打开文件出错。 请单击错误查看详细报错,根据其中的日志文件路径、Project、Logstore等信息进行进一步排查。 PARSE_DOCKER_LINE_ALARM service_docker_stdout插件错误,解析日志失败。 请单击错误查看详细报错,报错根据内容分为以下几类: parse docker line error: empty line:日志为空。 parse json docker line error...:以JSON格式解析日志失败,请根据错误信息以及日志的前512个字节进行排查。 parse cri docker line error...:以CRI格式解析日志失败,请根据错误信息以及日志的前512个字节进行排查。 PLUGIN_ALARM 插件初始化及相关调用发生错误。 请单击错误查看详细报错,报错根据内容分为以下几类,请根据具体的错误信息进行进一步排查。 init plugin error...:初始化插件失败。 hold on error...:暂停插件运行失败。 resume error...:恢复插件运行失败。 start service error...:启动 service input类型的插件失败。 stop service error...:停止 service input类型的插件失败。 PROCESSOR_INIT_ALARM regex插件错误,编译配置中指定的Regex正则表达式失败。 请单击错误查看详细报错,检查其中的正则表达式是否正确。 PROCESS_TOO_SLOW_ALARM Logtail日志解析速度过慢。 单击错误查看详细报错,根据其中的日志数量、缓冲区大小、解析时间来确定是否正常。 如果不正常,检查Logtail所在节点是否有其他进程占用了过多的CPU资源或是存在效率较低的正则表达式等不合理的解析配置。 REDIS_PARSE_ADDRESS_ALARM redis插件错误,配置中提供的ServerUrls存在解析失败的情况。 请单击错误查看详细报错,对其中报错的URL进行检查。 REGEX_FIND_ALARM regex 插件错误,无法从日志中找到配置中SourceKey指定的字段。 请单击错误查看详细报错,检查是否存在SourceKey配置错误或日志不合法的情况。 REGEX_UNMATCHED_ALARM regex插件错误,匹配失败。 请单击错误查看详细报错,报错根据内容分为以下几类,请根据具体的错误信息进行进一步地排查,例如检查配置是否正确。 unmatch this log content...:日志无法匹配配置中的正则表达式 match result count less...:匹配的结果数量少于配置中指定的 Keys 数量。 SAME_CONFIG_ALARM 同一个Logstore下存在同名的配置,后发现的配置会被抛弃。 请单击错误查看详细报错,根据其中的配置路径等信息排查是否存在配置错误的情况。 SPLIT_FIND_ALARM split_char以及split_string插件错误,无法从日志中找到配置中SourceKey指定的字段。 请单击错误查看详细报错,检查是否存在SourceKey配置错误或日志不合法的情况。 SPLIT_LOG_ALARM processor_split_char以及processor_split_string插件错误,解析得到的字段数量与SplitKeys中指定的不相同。 请单击错误查看详细报错,检查是否存在SourceKey配置错误或日志不合法的情况。 STAT_FILE_ALARM 插件内通过LogFileReader对象进行文件采集时发生错误。 请单击错误查看详细报错,根据其中的文件路径、错误信息进行进一步排查。 SERVICE_SYSLOG_INIT_ALARM service_syslog插件错误,初始化失败。 请单击错误查看详细报错,检查配置中的Address是否正确。 SERVICE_SYSLOG_STREAM_ALARM service_syslog插件错误,通过TCP采集时发生错误。 请单击错误查看详细报错,报错根据内容分为以下几类,请根据详细报错中的具体错误信息进行排查。 accept error...:执行Accept时发生错误,插件将等待一段时间后重试。 setKeepAlive error...:设置 Keep Alive失败,插件将跳过此错误并继续运行。 connection i/o timeout...:通过TCP读取时超时,插件将重设超时并继续读取。 scan error...:TCP 读取错误,插件将等待一段时间后重试。 SERVICE_SYSLOG_PACKET_ALARM service_syslog插件错误,通过UDP采集时发生错误。 请单击错误查看详细报错,报错根据内容分为以下几类,请根据详细报错中的具体错误信息进行排查。 connection i/o timeout...:通过UDP读取时超时,插件将重设超时并继续读取。 read from error...:UDP读取错误,插件将等待一段时间后重试。

保持可爱mmm 2020-03-26 23:02:18 0 浏览量 回答数 0

回答

一 容器 在学习k8s前,首先要了解和学习容器概念和工作原理。 什么是容器? 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。 容器的优势 容器使软件具备了超强的可移植能力。 对于开发人员 – Build Once, Run Anywhere 容器意味着环境隔离和可重复性。开发人员只需为应用创建一次运行环境,然后打包成容器便可在其他机器上运行。另外,容器环境与所在的 Host 环境是隔离的,就像虚拟机一样,但更快更简单。 对于运维人员 – Configure Once, Run Anything 只需要配置好标准的 runtime 环境,服务器就可以运行任何容器。这使得运维人员的工作变得更高效,一致和可重复。容器消除了开发、测试、生产环境的不一致性。 Docker概念 “Docker” 一词指代了多个概念,包括开源社区项目、开源项目使用的工具、主导支持此类项目的公司 Docker Inc. 以及该公司官方支持的工具。技术产品和公司使用同一名称,的确让人有点困惑。 我们来简单说明一下: IT 软件中所说的 “Docker” ,是指容器化技术,用于支持创建和使用容器。 开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。 Docker Inc. 公司凭借 Docker 社区产品起家,它主要负责提升社区版本的安全性,并将技术进步与广大技术社区分享。此外,它还专门对这些技术产品进行完善和安全固化,以服务于企业客户。 借助 Docker,您可将容器当做轻巧、模块化的虚拟机使用。同时,您还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境,从而有助于您针对云来优化您的应用。 Docker有三大核心概念: 镜像(Image)是一个特殊的文件系统,提供容器运行时所需的程序、库、配置等,构建后不会改变 容器(Container)实质是进程,拥有自己独立的命名空间。 仓库(Repository)一个仓库可以包含多个标签(Tag),每个标签对应一个镜像 容器工作原理 Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。 二 Kubernetes入门知识指南 Kubernets的知识都可以在官方文档查询,网址如下: https://kubernetes.io/zh/docs/home/ Kubernetes基础知识 Kubernetes是什么? Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 为什么需要 Kubernetes 容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果由操作系统处理此行为,会不会更容易? Kubernetes 为您提供: 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 存储编排 Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。 自动部署和回滚 您可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。 自动二进制打包 Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。 自我修复 Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。 密钥与配置管理 Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。 Kubernetes 组件 初学者首先要了解Kubernetes的基本概念,包括master、node、pod等。 Master Master是Kubernetes集群的大脑,运行着的守护进程服务包括kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络等。 kube-apiserver 主节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制面的前端。 kube-apiserver 在设计上考虑了水平扩缩的需要。 换言之,通过部署多个实例可以实现扩缩。 etcd etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 您的 Kubernetes 集群的 etcd 数据库通常需要有个备份计划。 kube-scheduler 主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。 调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。 kube-controller-manager 在主节点上运行控制器的组件。 从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。 这些控制器包括: 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌. 云控制器管理器-(cloud-controller-manager) cloud-controller-manager 运行与基础云提供商交互的控制器 cloud-controller-manager 仅运行云提供商特定的控制器循环。您必须在 kube-controller-manager 中禁用这些控制器循环,您可以通过在启动 kube-controller-manager 时将 --cloud-provider 参数设置为 external 来禁用控制器循环。 cloud-controller-manager 允许云供应商的代码和 Kubernetes 代码彼此独立地发展。在以前的版本中,核心的 Kubernetes 代码依赖于特定云提供商的代码来实现功能。在将来的版本中,云供应商专有的代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联。 以下控制器具有云提供商依赖性: 节点控制器(Node Controller): 用于检查云提供商以确定节点是否在云中停止响应后被删除 路由控制器(Route Controller): 用于在底层云基础架构中设置路由 服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器 数据卷控制器(Volume Controller): 用于创建、附加和装载卷、并与云提供商进行交互以编排卷 Node 节点组件在每个节点上运行,维护运行 Pod 并提供 Kubernetes 运行环境。 kubelet 一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。 kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。 kube-proxy kube-proxy 是集群中每个节点上运行的网络代理,实现 Kubernetes Service 概念的一部分。 kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。 如果有 kube-proxy 可用,它将使用操作系统数据包过滤层。否则,kube-proxy 会转发流量本身。 容器运行环境(Container Runtime) 容器运行环境是负责运行容器的软件。 Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)。 Pod 在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod。Pod是管理,创建,计划的最小单元. 一个Pod相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。 Pod 的context可以理解成多个linux命名空间的联合 PID 命名空间(同一个Pod中应用可以看到其它进程) 网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限) IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信) UTS 命名空间(同一个Pod中的应用共享一个主机名称) 同一个Pod中的应用可以共享磁盘,磁盘是Pod级的,应用可以通过文件系统调用。 由于docker的架构,一个Pod是由多个相关的并且共享磁盘的容器组成,Pid的命名空间共享还没有应用到Docker中 和相互独立的容器一样,Pod是一种相对短暂的存在,而不是持久存在的,正如我们在Pod的生命周期中提到的,Pod被安排到结点上,并且保持在这个节点上直到被终止(根据重启的设定)或者被删除,当一个节点死掉之后,上面的所有Pod均会被删除。特殊的Pod永远不会被转移到的其他的节点,作为替代,他们必须被replace. 三 通过kubeadm方式创建一个kubernetes 对kubernetes的概念和组件有所了解以后,就可以通过kubeadm的方式创建一个kubernetes集群。 安装前准备工作 创建虚拟机 创建至少2台虚拟机,可以在本地或者公有云。 下载部署软件 需要下载的软件包括calico、demo-images、docker-ce、kube、kube-images、kubectl、metrics-server 安装部署 具体安装过程参考官网文档: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/ 四 安装后的练习 安装后详读官方文档,做下面这些组件的练习操作,要达到非常熟练的程度。 Node Namespace Pod Deployment DaemonSet Service Job Static Pod ConfigMap Secrets Volume Init-containers Affinity and Anti-Affinity Monitor and logs Taints and Tolerations Cordon and Drain Backing up etcd 这些内容都非常熟练以后,基本就达到了入门的水平。

红亮 2020-03-02 11:09:17 0 浏览量 回答数 0

问题

Web测试方法

技术小菜鸟 2019-12-01 21:41:32 7022 浏览量 回答数 1

问题

支付宝的性能测试

云效平台 2019-12-01 21:47:13 5472 浏览量 回答数 1

问题

IIS7.5安装配置UrlScan3.1应用防火墙

虎笑 2019-12-01 21:00:19 11275 浏览量 回答数 2

回答

新地址 24题 Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。 23题 Spring Boot 的核心配置文件是application(.yml 或者 .properties) 和 bootstrap(.yml 或者 .properties) 配置文件。boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载,boostrap 里面的属性不能被覆盖。application 配置文件主要用于 Spring Boot 项目的自动化配置。bootstrap 配置文件的应用场景:使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的属性;一些加密/解密的场景。 22题 优点:快速构建项目;对主流开发框架的无配置集成;starters自动依赖与版本控制;大量的自动配置,简化开发,也可修改默认值;无需配置XML,无代码生成,开箱即用;项目可独立运行,无须外部依赖Servlet容器;提供运行时的应用监控;与云计算的天然集成。缺点:集成度较高,使用过程中不太容易了解底层。 21题 Spring Boot的初衷就是为了简化spring的配置,使得开发中集成新功能时更快,简化或减少相关的配置文件。Spring Boot其实是一个整合很多可插拔的组件(框架),内嵌了使用工具(比如内嵌了Tomcat、Jetty等),方便开发人员快速搭建和开发的一个框架。 20题 当程序创建对象、数组等引用类型实体时,系统会在堆内存中为之分配一块内存区,对象就保存在内存区中,不需要显式的去释放一个对象的内存,而是由虚拟机自行执行。在JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,标记那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。 19题 HashMap线程不安全,HashTable线程安全。HashMap允许有一个key为null,多个value为null;而HashTable不允许key和vale为null。继承类不一样,HashMap继承的是AbstractMap,HashTable继承的是Dictionary。初始容量不一样。使用的hashcode不一样。内部遍历方式的实现不一样。 18题 作用:内容可见性和禁止指令重排。内存可见性:某线程对 volatile 变量的修改,对其他线程都是可见的,即获取 volatile 变量的值都是最新的;禁止指令重排:重排序在单线程下一定能保证结果的正确性,但是在多线程环境下,可能发生重排序影响结果,若用volatile修饰共享变量,在编译时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。使用:当一个线程需要立刻读取到另外一个线程修改的变量值的时候,我们就可以使用volatile。区别:volatile是变量修饰符,而synchronized则作用于一段代码或者方法;volatile只是在线程内存和main memory(主内存)间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源;synchronized 关键字可以保证变量原子性和可见性,volatile 不能保证原子性。 17题 非公平主要表现在获取锁的行为上,并非是按照申请锁的时间前后给等待线程分配锁的 ,每当锁被释放后 ,任何一个线程都有机会竞争到锁,这样做的目的是为了提高执行性能 ,缺点是可能会产生线程饥饿现象 。 16题 如果线程遇到了 IO 阻塞,无能为力,因为IO是操作系统实现的,Java代码并没有办法直接接触到操作系统。如果线程因为调用 wait()、sleep()、或者 join()方法而导致的阻塞,可以中断线程,并且通过抛出 InterruptedException 来唤醒它。 15题 原子操作就是无法被别的线程打断的操作。要么不执行,要么就执行成功。在Java中可以通过锁和循环CAS的方式来实现原子操作。从JDK 1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。 14题 wait()是Object类的方法,所以每一个对象能使用wait()方法。sleep()是Thread类中的静态方法。sleep不会释放锁,但会让出cpu,sleep会在指定的休眠时间后自动唤醒。wait则会释放锁,让出系统资源,并且加入wait set中,wait不会自动唤醒,而需要notify()或者notifyAll()唤醒。sleep和wait都可以被中断,使用sleep需要捕获异常。wait与notify、notifyAll只能在同步代码块中使用,而sleep可以在任何地方使用。 13题 Synchronized 是由 JVM 实现的一种实现互斥同步的一种方式,查看编译后的字节码,会发现被 Synchronized 修饰过的程序块,在编译前后被编译器生成了monitorenter 和 monitorexit 两个字节码指令。在虚拟机执行到 monitorenter 指令时,首先要尝试获取对象的锁:如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁,把锁的计数器+1;当执行 monitorexit 指令时将锁计数器-1;当计数器为0时,锁就被释放了。如果获取对象失败了,那当前线程就要阻塞等待,直到对象锁被另外一个线程释放为止。Java 中 Synchronize 通过在对象头设置标记,达到了获取锁和释放锁的目的。 12题 Mybatis 通过动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler 的 invoke()方法,只会拦截那些你指定需要拦截的方法。 实现方法:1.编写Intercepror接口的实现类;2.设置插件的签名,告诉mybatis拦截哪个对象的哪个方法;3.最后将插件注册到全局配置文件中。 11题 Mybatis可以映射枚举类,不单可以映射枚举类,Mybatis可以映射任何对象到表的一列上。映射方式为自定义一个TypeHandler,实现TypeHandler的setParameter()和getResult()接口方法。TypeHandler 有两个作用,一是完成从 javaType至jdbcType 的转换,二是完成jdbcType至javaType的转换,体现为 setParameter()和getResult()两个方法,分别代表设置sql问号占位符参数和获取列查询结果。 10题 Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。分页插件的原理:使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。举例:select * from student,拦截 sql 后重写为:select t.* from(select * from student)t limit 0,10。 9题 resultType和resultMap都是表示数据库表与pojo之间的映射规则的。类的名字和数据库相同时,可以直接设置resultType 参数为Pojo类。若不同或者有关联查询,需要设置resultMap将结果名字和Pojo名字进行转换。在项目中我们定义的resultMap多了property和column属性,实际也就是分别配置Pojo类的属性和对应的表字段之间的映射关系,多了这个映射关系以后,方便维护。 8题 之所以说Mybatis半自动化,是因为SQL语句需要用户自定义,SQL的解析、执行等工作由Mybatis执行。区别:Hibernate属于全自动 ORM 映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以它是半自动ORM映射工具。 7题 MyBatis 的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,默认就有,在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据,不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。二级缓存是mapper级别的缓存,默认是不打开的,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。 6题 RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上是为了细化映射,即根据特定的HTTP请求方法(GET、POST 方法等)、HTTP请求中是否携带特定参数等条件,将请求映射到匹配的方法上。 5题 1、前置通知(before advice):在目标方法调用之前执行; 2、后置通知(after returning advice):在目标方法调用之后执行,一旦目标方法产生异常不会执行; 3、最终通知(after(finally) advice):在目标调用方法之后执行,无论目标方法是否产生异常,都会执行; 4、异常通知(after throwing advice):在目标方法产生异常时执行; 5、环绕通知(around advice):在目标方法执行之前和执行之后都会执行,可以写一些非核心的业务逻辑,一般用来替代前置通知和后置通知。 4题 1、通过构造器或工厂方法创建Bean实例;2、为Bean的属性设置值和对其他Bean的引用;3、将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization方法;4、调用Bean的初始方法(init-method);5、将bean实例传递给bean后置处理器的postProcessAfterInitialization方法;6、bean可以使用了;7、当容器关闭时,调用Bean的销毁方法(destroy-method) 3题 在TransactionDefinition接口中定义了五个表示隔离级别的常量: ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。 ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。 ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生 ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。 ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 2 题 自动装配提供五种不同的模式供Spring容器用来自动装配beans之间的依赖注入: 1.默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean。 2.byName:通过参数名自动装配,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。 3.byType:按照参数的数据类型进行自动装配,之后容器试图匹配和装配和该bean的属性类型一样的bean。如果存在多个相同类型的bean对象,会出错。 4.constructor:使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。 5.autodetect:如果找到默认的构造函数,则通过 constructor的方式自动装配,否则使用 byType的方式自动装配。在Spring3.0以后的版本此模式已被废弃,已经不再合法了。 1 题 循环依赖只会存在在单例实例中,多例循环依赖直接报错。Spring先用构造器实例化Bean对象,然后将实例化结束的对象放到一个Map中,并且Spring提供获取这个未设置属性的实例化对象的引用方法。当Spring实例化了A类、B类后,紧接着会去设置对象的属性,此时发现A类依赖B类,就会去Map中取出已经存在的单例B类对象,以此类推。因为所持有的都是引用,所以A类一改变B类也会跟着改变。从而解决循环依赖问题。

游客ih62co2qqq5ww 2020-03-03 18:05:36 0 浏览量 回答数 0

问题

DRDS 错误代码如何解决?

猫饭先生 2019-12-01 21:21:21 7993 浏览量 回答数 0

回答

MongoDB ACID事务支持 这里要有一定的关系型数据库的事务的概念,不然不一定能理解的了这里说的事务概念。 下面说一说MongoDB的事务支持,这里可能会有疑惑,前面我们在介绍MongoDB时,说MongoDB是一个NoSQL数据库,不支持事务。这里又介绍MongoDB的事务。这里要说明一下MongoDB的事务支持跟关系型数据库的事务支持是两码事,如果你已经非常了解关系型数据库的事务,通过下面一副图对比MongoDB事务跟MySQL事务的不同之处。 MongoDB是如何实现事务的ACID? 1)MongoDB对原子性(Atomicity)的支持 原子性在Mongodb中到底是一个什么概念呢?为什么说支持但又说Mongodb的原子性是单行/文档级原子性,这里提供了一个MongoDB更新语句样例,如下图: MongoDB是如何实现事务的ACID? 更新“username”等于“tj.tang”的文档,更新salary、jobs、hours字段。这里对于这三个字段Mongodb在执行时要么都更新要么都不更新,这个概念在MySQL中可能你没有考虑过,但在MongoDB中由于文档可以嵌套子文档可以很复杂,所以Mongodb的原子性叫单行/文档级原子性。 对于关系型数据库的多行、多文档、多语句原子性目前Mongodb是不支持的,如下情况: MongoDB是如何实现事务的ACID? MongoDB更新条件为工资小于50万的人都把工资调整为50万,这就会牵扯到多文档更新原子性。如果当更新到Frank这个文档时,出现宕机,服务器重启之后是无法像关系型数据库那样做到数据回滚的,也就是说处理这种多文档关系型数据库事务的支持,但MongoDB不支持。那么怎么解决Mongodb这个问题呢?可以通过建模,MongoDB不是范式而是反范式的设计,通过大表和小表可以把相关的数据放到同一个文档中去。然后通过一条语句来执行操作。 2)MongoDB对一致性(consistency)的支持 对于数据一致性来说,传统数据库(单机)跟分布式数据库(MongoDB)对于数据一致性是不太一样的,怎么理解呢?如下图: MongoDB是如何实现事务的ACID? 对于传统型数据库来说,数据一致性主要是在单机上,单机的问题主要是数据进来时的规则检验,数据不能被破坏掉。而在分布式数据库上,因为他们都是多节点分布式的,我们讲的一致性往往就是讲的各个节点之间的数据是否一致。而MongoDB在这点上做的还是不错的,MongoDB支持强一致性或最终一致性(弱一致性),MongoDB的数据一致性也叫可调一致性,什么意思呢?如下图: MongoDB是如何实现事务的ACID? MongoDB的可调一致性,也就是可以自由选择强一致性或最终一致性,如果你的应用场景是前台的方式可以选择强一致性,如果你的应用场景是后台的方式(如报表)可以选择弱一致性。 一致性 上面我们讲到了通过将数据冗余存储到不同的节点来保证数据安全和减轻负载,下面我们来看看这样做引发的一个问题:保证数据在多个节点间的一致性是非常困难的。在实际应用中我们会遇到很多困难,同步节点可能会故障,甚至会无法恢复,网络可能会有延迟或者丢包,网络原因导致集群中的机器被分隔成两个不能互通的子域等等。在NoSQL中,通常有两个层次的一致性:第一种是强一致性,既集群中的所有机器状态同步保持一致。第二种是最终一致性,既可以允许短暂的数据不一致,但数据最终会保持一致。我们先来讲一下,在分布式集群中,为什么最终一致性通常是更合理的选择,然后再来讨论两种一致性的具体实现结节。 关于CAP理论 为什么我们会考虑削弱数据的一致性呢?其实这背后有一个关于分布式系统的理论依据。这个理论最早被Eric Brewer提出,称为CAP理论,尔后Gilbert和Lynch对CAP进行了理论证明。这一理论首先把分布式系统中的三个特性进行了如下归纳: 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。 分区容忍性(P):集群中的某些节点在无法联系后,集群整体是否还能继续进行服务。 而CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。 要保证数据强一致性,最简单的方法是令写操作在所有数据节点上都执行成功才能返回成功,也就是同步概念。而这时如果某个结点出现故障,那么写操作就成功不了了,需要一直等到这个节点恢复。也就是说,如果要保证强一致性,那么就无法提供7×24的高可用性。 而要保证可用性的话,就意味着节点在响应请求时,不用完全考虑整个集群中的数据是否一致。只需要以自己当前的状态进行请求响应。由于并不保证写操作在所有节点都写成功,这可能会导致各个节点的数据状态不一致。 CAP理论导致了最终一致性和强一致性两种选择。当然,事实上还有其它的选择,比如在Yahoo的PNUTS中,采用的就是松散的一致性和弱可用性结合的方法。但是我们讨论的NoSQL系统没有类似的实现,所以我们在后续不会对其进行讨论。 强一致性 强一致性的保证,要求所有数据节点对同一个key值在同一时刻有同样的value值。虽然实际上可能某些节点存储的值是不一样的,但是作为一个整体,当客户端发起对某个key的数据请求时,整个集群对这个key对应的数据会达成一致。下面就举例说明这种一致性是如何实现的。 假设在我们的集群中,一个数据会被备份到N个结点。这N个节点中的某一个可能会扮演协调器的作用。它会保证每一个数据写操作会在成功同步到W个节点后才向客户端返回成功。而当客户端读取数据时,需要至少R个节点返回同样的数据才能返回读操作成功。而NWR之间必须要满足下面关系:R+W>N 下面举个实在的例子。比如我们设定N=3(数据会备份到A、B、C三个结点)。比如值 employee30:salary 当前的值是20000,我们想将其修改为30000。我们设定W=2,下面我们会对A、B、C三个节点发起写操作(employee30:salary, 30000),当A、B两个节点返回写成功后,协调器就会返回给客户端说写成功了。至于节点C,我们可以假设它从来没有收到这个写请求,他保存的依然是20000那个值。之后,当一个协调器执行一个对employee30:salary的读操作时,他还是会发三个请求给A、B、C三个节点: 如果设定R=1,那么当C节点先返回了20000这个值时,那我们客户端实际得到了一个错误的值。 如果设定R=2,则当协调器收到20000和30000两个值时,它会发现数据不太正确,并且会在收到第三个节点的30000的值后判断20000这个值是错误的。 所以如果要保证强一致性,在上面的应用场景中,我们需要设定R=2,W=2 如果写操作不能收到W个节点的成功返回,或者写操作不能得到R个一致的结果。那么协调器可能会在某个设定的过期时间之后向客户端返回操作失败,或者是等到系统慢慢调整到一致。这可能就导致系统暂时处于不可用状态。 对于R和W的不同设定,会导致系统在进行不同操作时需要不同数量的机器节点可用。比如你设定在所有备份节点上都写入才算写成功,既W=N,那么只要有一个备份节点故障,写操作就失败了。一般设定是R+W = N+1,这是保证强一致性的最小设定了。一些强一致性的系统设定W=N,R=1,这样就根本不用考虑各个节点数据可能不一致的情况了。 HBase是借助其底层的HDFS来实现其数据冗余备份的。HDFS采用的就是强一致性保证。在数据没有完全同步到N个节点前,写操作是不会返回成功的。也就是说它的W=N,而读操作只需要读到一个值即可,也就是说它R=1。为了不至于让写操作太慢,对多个节点的写操作是并发异步进行的。在直到所有的节点都收到了新的数据后,会自动执行一个swap操作将新数据写入。这个操作是原子性和一致性的。保证了数据在所有节点有一致的值。 最终一致性 像Voldemort,Cassandra和Riak这些类Dynamo的系统,通常都允许用户按需要设置N,R,W三个值,即使是设置成W+R<= N也是可以的。也就是说他允许用户在强一致性和最终一致性之间自由选择。而在用户选择了最终一致性,或者是W 3)MongoDB对隔离性(isolation)的支持 在关系型数据库中,SQL2定义了四种隔离级别,分别是READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。但是很少有数据库厂商遵循这些标准,比如Oracle数据库就不支持READ UNCOMMITTED和REPEATABLE READ隔离级别。而MySQL支持这全部4种隔离级别。每一种级别都规定了一个事务中所做的修改,哪些在事务内核事务外是可见的,哪些是不可见的。为了尽可能减少事务间的影响,事务隔离级别越高安全性越好但是并发就越差;事务隔离级别越低,事务请求的锁越少,或者保持锁的时间就越短,这也就是为什么绝大多数数据库系统默认的事务隔离级别是RC。 下图展示了几家不同的数据库厂商的不同事物隔离级别。 MongoDB是如何实现事务的ACID? MongoDB在3.2之前使用的是“读未提交”,这种情况下会出现“脏读”。但在MongoDB 3.2开始已经调整为“读已提交”。 下面说说每种隔离级别带来的问题: READ-UNCOMMITTED(读尚未提交的数据) 在这个级别,一个事务的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为“脏读(dirty read)”。这个级别会导致很多问题,从性能上来说,READ UNCOMMITTED不会比其他的级别好太多,但却缺乏其他级别的很多好处,除非真的有非常必要的理由,在实际应用中一般很少使用。 READ-COMMITTED(读已提交的数据) 在这个级别,能满足前面提到的隔离性的简单定义:一个事务开始时,只能“看见”已经提交的事务所做的修改。换句话说,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候也叫“不可重复读(non-repeatable read)”,因为两次执行同样的查询,可能会得到不一样的结果。 REPEATABLE-READ(可重复读) 在这个级别,保证了在同一个事务中多次读取统一记录的结果是一致的。MySQL默认使用这个级别。InnoDB和XtraDB存储引擎通过多版本并发控制MVCC(multiversion concurrency control)解决了“幻读”和“不可重复读”的问题。通过前面的学习我们知道RR级别总是读取事务开始那一刻的快照信息,也就是说这些数据数据库当前状态,这在一些对于数据的时效特别敏感的业务中,就很可能会出问题。 SERIALIZABLE(串行化) 在这个级别,它通过强制事务串行执行,避免了前面说的一系列问题。简单来说,SERIALIZABLE会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。实际应用中也很少在本地事务中使用SERIALIABLE隔离级别,主要应用在InnoDB存储引擎的分布式事务中。 4)MongoDB对持久性(durability)的支持 对于数据持久性来说,在传统数据库中(单机)的表现为服务器任何时候发生宕机都不需要担心数据丢失的问题,因为有方式可以把数据永久保存起来了。一般都是通过日志来保证数据的持久性。通过下图来看一下传统数据库跟MongoDB对于数据持久性各自所使用的方式。 MongoDB是如何实现事务的ACID? 从上图可以看出,MongoDB同样是使用数据进来先写日志(日志刷盘的速度是非常快)然后在写入到数据库中的这种方式来保证数据的持久性,如果出现服务器宕机,当启动服务器时会从日志中读取数据。不同的是传统数据库这种方式叫做“WAL” Write-Ahead Logging(预写日志系统),而MongoDB叫做“journal”。此外MongoDB在数据持久性上这点可能做的更好,MongoDB的复制默认节点就是三节点以上的复制集群,当数据到达主节点之后会马上同步到从节点上去。

景凌凯 2019-12-02 02:05:12 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站