{"id":675,"date":"2021-09-08T09:44:10","date_gmt":"2021-09-08T01:44:10","guid":{"rendered":"https:\/\/blog.espnlol.com\/?p=675"},"modified":"2023-08-03T15:02:01","modified_gmt":"2023-08-03T07:02:01","slug":"proxmox-ve-web-%e7%95%8c%e9%9d%a2%e6%b7%bb%e5%8a%a0cpu%e5%8f%8a%e7%a3%81%e7%9b%98%e6%b8%a9%e5%ba%a6","status":"publish","type":"post","link":"https:\/\/blog.espnlol.com\/?p=675","title":{"rendered":"Proxmox VE web \u754c\u9762\u6dfb\u52a0CPU\u53ca\u78c1\u76d8\u6e29\u5ea6"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u5b89\u88c5\u6e29\u5ea6\u68c0\u6d4b\u5de5\u5177<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#CPU \u53ca\u4e3b\u677f\u6e29\u5ea6\u68c0\u6d4b\uff1alm-sensors\napt install lm-sensors -y\n\n#\u5b89\u88c5\u5b8c\u6210\u540e\u6267\u884c\u63a2\u6d4b\nsensors\nacpitz-acpi-0\nAdapter: ACPI interface\ntemp1:        +36.0\u00b0C  (crit = +120.0\u00b0C)\n\n10900t\nAdapter: ISA adapter\nPackage id 0:  +37.0\u00b0C  (high = +84.0\u00b0C, crit = +100.0\u00b0C)\nCore 0:        +37.0\u00b0C  (high = +84.0\u00b0C, crit = +100.0\u00b0C)\nCore 1:        +35.0\u00b0C  (high = +84.0\u00b0C, crit = +100.0\u00b0C)\nCore 2:        +32.0\u00b0C  (high = +84.0\u00b0C, crit = +100.0\u00b0C)\nCore 3:        +34.0\u00b0C  (high = +84.0\u00b0C, crit = +100.0\u00b0C)\n...\n\n#\u786c\u76d8\u6e29\u5ea6\u68c0\u6d4b\uff1ahddtemp\napt install hddtemp -y\n\n#\u5b89\u88c5\u5b8c\u6210\u540e\u6267\u884c\u63a2\u6d4b\nhddtemp \/dev\/sd?\n\/dev\/sda: WDC WD40EZRZ-00WN9B0: 29\u00b0C\n\/dev\/sdb: ADATA SP600: 26\u00b0C\n\/dev\/sdc: WD2500: 29\u00b0C\n\/dev\/sdd: ADATA SP900: 38\u00b0C\n\n#\u8d4b\u4e88\u7279\u6743\nchmod +s \/usr\/sbin\/hddtemp<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u7f16\u8f91 PVE web \u670d\u52a1\u6587\u4ef6<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#\u9996\u5148\u5907\u4efd\/usr\/share\/perl5\/PVE\/API2\/Nodes.pm\uff0c\u5207\u8bb0\u8981\u5907\u4efd\uff01\uff01\uff01\n#\u7f16\u8f91\u6587\u4ef6 \/usr\/share\/perl5\/PVE\/API2\/Nodes.pm\uff0c\u8df3\u8f6c\u5230res->{pveversion}\n# ...[OMITTED]...\n        $res->{pveversion} = PVE::pvecfg::package() . \"\/\" .\n            PVE::pvecfg::version_text();\n\n        $res->{temperatures} = `sensors`;  # \u6dfb\u52a0\u6b64\u884c\u4ee5\u83b7\u53d6 CPU \u4e0e\u4e3b\u677f\u6e29\u5ea6\n\n        $res->{hdd_temperatures} = `hddtemp \/dev\/sd?`;  # \u6dfb\u52a0\u6b64\u884c\u4ee5\u83b7\u53d6\u786c\u76d8\u6e29\u5ea6\n\n        my $dinfo = df('\/', 1);     # output is bytes\n# ...[OMITTED]...\n\n#\u9996\u5148\u5907\u4efd\/usr\/share\/pve-manager\/js\/pvemanagerlib.js\uff0c\u7f16\u8f91\u6587\u4ef6 \/usr\/share\/pve-manager\/js\/pvemanagerlib.js\uff0c\u8df3\u8f6c\u5230 gettext('Status') + ': ' + zpool, \u4f4d\u7f6e\n\/\/ ...[OMITTED]...\n var win = Ext.create('Ext.window.Window', {\n            modal: true,\n            width: 800,\n            height: 500,  \/\/ \u539f\u59cb\u503c\u4e3a 400\uff0c\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u559c\u597d\u8c03\u6574\n            resizable: true,\n            layout: 'fit',\n            title: gettext('Status') + ': ' + zpool,\n            items:[{\n\/\/ ...[OMITTED]...\n\n#\u8df3\u8f6c\u5230 widget.pveNodeStatus \u4f4d\u7f6e\n#\u4e24\u5904 height \u7684\u503c\u9700\u6309\u60c5\u51b5\u4fee\u6539\uff0c\u6bcf\u591a\u4e00\u884c\u6570\u636e\u589e\u52a0 20\n#\u4f8b\u5982\u6709 1 \u884c CPU \u4e0e\u4e3b\u677f\u6e29\u5ea6\u6570\u636e\u30013 \u884c\u786c\u76d8\u6e29\u5ea6\u6570\u636e\uff083 \u5757\u786c\u76d8\uff09\uff0c\u5373\u4e3a 480 \u4e0e 380\n\/\/ ...[OMITTED]...\nExt.define('PVE.node.StatusView', {\n    extend: 'PVE.panel.StatusView',\n    alias: 'widget.pveNodeStatus',\n\n    height: 400,  \/\/ \u539f\u59cb\u503c\u4e3a 300\n    bodyPadding: '20 15 20 15',\n\n    layout: {\n\/\/ ...[OMITTED]...\n\n#\u8df3\u8f6c\u5230 PVE Manager Version \u4f4d\u7f6e\n\/\/ ...[OMITTED]...\n        {\n            itemId: 'version',\n            colspan: 2,\n            printBar: false,\n            title: gettext('PVE Manager Version'),\n            textField: 'pveversion',\n            value: ''\n        },  \/\/ \u6ce8\u610f\u6dfb\u52a0\u9017\u53f7\n        {\n            itemId: 'temperatures',\n            colspan: 2,\n            printBar: false,\n            title: gettext('CPU Temperatures'),\n            textField: 'temperatures',\n            renderer: function(value) {\n                value = value.replace(\/\u00c2\/g, '');\n                let data = [];\n                let cpus = value.matchAll(\/^coretemp-isa-(\\d{4})$\\n.*?\\n((?:Package|Core)[\\s\\S]*?^\\n)+\/gm);\n                for (const cpu of cpus) {\n                    let cpuNumber = parseInt(cpu[1], 10);\n                    data[cpuNumber] = {\n                        packages: [],\n                        cores: []\n                    };\n\n                    let packages = cpu[2].matchAll(\/^Package id \\d+:\\s*([^\u00b0]+).*$\/gm);\n                    for (const package of packages) {\n                        data[cpuNumber]['packages'].push(package[1]);\n                    }\n\n                    let cores = cpu[2].matchAll(\/^Core \\d+:\\s*([^\u00b0]+).*$\/gm);\n                    for (const core of cores) {\n                        data[cpuNumber]['cores'].push(core[1]);\n                    }\n                }\n\n                let output = '';\n                for (const [i, cpu] of data.entries()) {\n                    output += `CPU ${i}: `;\n                    if (cpu.packages.length > 0) {\n                        for (const packageTemp of cpu.packages) {\n                            output += `${packageTemp}\u00b0C `;\n                        }\n                    }\n                    if (cpu.cores.length > 0) {\n                        output += '(';\n                        for (const coreTemp of cpu.cores) {\n                            output += `${coreTemp}, `;\n                        }\n                        output = output.slice(0, -2);\n                        output += ')\u00b0C';\n                    }\n                    output += ' | ';\n                }\n\n                let boardTemp = value.match(\/^acpitz-acpi-\\d+$\\n.*?\\n^temp1:\\s*([^\u00b0]+).*$\/m);\n                if (boardTemp.length > 0) {\n                    output += `Board: ${boardTemp[1]}\u00b0C | `\n                }\n                let nvmeTemp = value.match(\/^nvme-pci-\\d+$\\n.*?\\n^Composite:\\s*([^\u00b0]+).*$\/m);\n                if (nvmeTemp.length > 0) {\n                    output += `NVME: ${nvmeTemp[1]}\u00b0C | `\n                }\n                output = output.slice(0, -3);\n\n                return output;\n            }\n        },\n        {\n            itemId: 'hdd-temperatures',\n            colspan: 2,\n            printBar: false,\n            title: gettext('HDD Temperatures'),\n            textField: 'hdd_temperatures',\n            renderer: function(value) {\n                value = value.replace(\/\u00c2\/g, '');\n                return value.replace(\/\\n\/g, '&lt;br>')\n            }\n        }\n    ],\n\/\/ ...[OMITTED]...\n\n#\u5168\u90e8\u7f16\u8f91\u5b8c\u6210\u540e\u6267\u884c\nsystemctl restart pveproxy<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u663e\u793a\u6548\u679c<\/h3>\n\n\n\n<p><strong>\u5728\u6d4f\u89c8\u5668\u4e2d\u6e05\u9664 PVE \u63a7\u5236\u53f0\u7684\u7f13\u5b58<\/strong>\uff0c\u91cd\u65b0\u52a0\u8f7d\u5373\u53ef\u5728\u8282\u70b9\u6982\u8981\u663e\u793a\u6e29\u5ea6\u4fe1\u606f<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"362\" src=\"https:\/\/blog.espnlol.com\/wp-content\/uploads\/2021\/09\/a1111-1024x362.png\" alt=\"\" class=\"wp-image-679\" srcset=\"https:\/\/blog.espnlol.com\/wp-content\/uploads\/2021\/09\/a1111-1024x362.png 1024w, https:\/\/blog.espnlol.com\/wp-content\/uploads\/2021\/09\/a1111-300x106.png 300w, https:\/\/blog.espnlol.com\/wp-content\/uploads\/2021\/09\/a1111-768x272.png 768w, https:\/\/blog.espnlol.com\/wp-content\/uploads\/2021\/09\/a1111.png 1445w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u672c\u6587\u8f6c\u81ea:<a href=\"https:\/\/zry.io\/archives\/285\">https:\/\/zry.io\/archives\/285<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5b89\u88c5\u6e29\u5ea6\u68c0\u6d4b\u5de5\u5177 \u7f16\u8f91 PVE web \u670d\u52a1\u6587\u4ef6 \u663e\u793a\u6548\u679c \u5728\u6d4f\u89c8\u5668\u4e2d\u6e05\u9664 PV &hellip; <a href=\"https:\/\/blog.espnlol.com\/?p=675\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[],"class_list":["post-675","post","type-post","status-publish","format-standard","hentry","category-pve"],"_links":{"self":[{"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=\/wp\/v2\/posts\/675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=675"}],"version-history":[{"count":3,"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=\/wp\/v2\/posts\/675\/revisions"}],"predecessor-version":[{"id":890,"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=\/wp\/v2\/posts\/675\/revisions\/890"}],"wp:attachment":[{"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espnlol.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}