我看好你哦 發表於 2020-1-21 16:26:00

【Java】+获取Linux服务器的CPU、内存使用率

<p>&nbsp;依赖</p>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">dependency</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">groupId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>ch.ethz.ganymed<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">groupId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">artifactId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>ganymed-ssh2<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">artifactId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">version</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>262<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">version</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">dependency</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>&nbsp;</p>
<p>ZgxFileUtil工具</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_d3b0c782-7f64-490f-ba34-5b470cc7f1ec" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_d3b0c782-7f64-490f-ba34-5b470cc7f1ec" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_d3b0c782-7f64-490f-ba34-5b470cc7f1ec" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> com.file;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.ZgxLoggerUtil;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.csvreader.CsvReader;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.csvreader.CsvWriter;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.log4j.Logger;

</span><span style="color: rgba(0, 0, 255, 1)">import</span> javax.swing.*<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.IOException;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.nio.charset.Charset;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.ArrayList;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.List;

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> Jarvis
* </span><span style="color: rgba(128, 128, 128, 1)">@version</span><span style="color: rgba(0, 128, 0, 1)"> 1.0
* @time 2019/12/20 9:35
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ZgxFileUtil {
    </span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> Logger log = ZgxLoggerUtil.getLogger(ZgxFileUtil.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 功能:将数据写入csv文件中
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filePath 文件路径
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> header   文件头
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> contents 文件内容
   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
   <span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> writeCsv(String filePath, String[] header, List&lt;String[]&gt;<span style="color: rgba(0, 0, 0, 1)"> contents) {
      CsvWriter csvWriter </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> CsvWriter(filePath, ',', Charset.forName("GBK"<span style="color: rgba(0, 0, 0, 1)">));

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 写入文件头</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> (header != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                csvWriter.writeRecord(header);
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
                e.printStackTrace();
            }
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 写入文件行</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; contents.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                csvWriter.writeRecord(contents.get(i));
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
                e.printStackTrace();
            }
      }
      csvWriter.close();

      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    }

    </span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> writeCsv(String filePath, String[] header, List&lt;String[]&gt; contents, JProgressBar jProgressBar, List&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)"> fileType) {
      List</span>&lt;CsvWriter&gt; csvWriterList = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; fileType.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            csvWriterList.add(</span><span style="color: rgba(0, 0, 255, 1)">new</span> CsvWriter(String.format("%s.%s", filePath, fileType.get(i)), ',', Charset.forName("GBK"<span style="color: rgba(0, 0, 0, 1)">)));
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 写入文件头</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> (header != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; csvWriterList.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
                  csvWriterList.get(i).writeRecord(header);
                }
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
                e.printStackTrace();
            }
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 写入文件行</span>
      <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; contents.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> j = 0; j &lt; csvWriterList.size(); j++<span style="color: rgba(0, 0, 0, 1)">) {
                  csvWriterList.get(j).writeRecord(contents.get(i));
                  System.out.println(String.format(</span>"写入“%s”文件 第%s行", csvWriterList.get(j), i + 1<span style="color: rgba(0, 0, 0, 1)">));
                }
                jProgressBar.setValue(i </span>+ 1<span style="color: rgba(0, 0, 0, 1)">);
                System.out.println(String.format(</span>"总:%s 最小:%s 最大:%s 当前:%s"<span style="color: rgba(0, 0, 0, 1)">, contents.size(), jProgressBar.getMinimum(), jProgressBar.getMaximum(), i));
            }

            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; csvWriterList.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
                csvWriterList.get(i).close();
            }
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
      }
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 功能:读取CSV文件
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> readHeaders 是否要读文件头
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filePath    文件路径
   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回读取的数据
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;String[]&gt; readCsv(<span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> readHeaders, String filePath) {
      List</span>&lt;String[]&gt; contentHangs = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            CsvReader csvReader </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> CsvReader(filePath, ',', Charset.forName("GBK"<span style="color: rgba(0, 0, 0, 1)">));
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">readHeaders) {
                csvReader.readHeaders();
            }

            </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (csvReader.readRecord()) {
                contentHangs.add(csvReader.getValues());
            }

            csvReader.close();
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
      }

      </span><span style="color: rgba(0, 0, 255, 1)">int</span> hang = 0<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">int</span> lie = 0<span style="color: rgba(0, 0, 0, 1)">;
      log.info(String.format(</span>"第%s行第%s列的数据=%s"<span style="color: rgba(0, 0, 0, 1)">, hang, lie, contentHangs.get(hang)));
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> contentHangs;
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 功能:数据清洗(读取一个旧文件的数据 清洗预期的数据后 再写入到一个新的文件中)
   * 备注:清洗逻辑需变更
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> oldFilePath 原文件路径
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> newFilePath 清洗后的新文件路径
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> readAndWriteCsv(String oldFilePath, String newFilePath) {
      </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)"> 【清洗原理】从idb上导出的数据 有双引号引起来的 所以要清洗下数据 取双引号中间的数据</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> step1 读取文件 清洗数据</span>
      List&lt;String[]&gt; read = readCsv(<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">, oldFilePath);
      List</span>&lt;String[]&gt; newData = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; read.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            String[] substring </span>= {read.get(i).substring(0, read.get(i).length())};
            newData.add(substring);
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> step2 将清洗后的数据写入文件</span>
      writeCsv(newFilePath, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, newData);
    }

}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;</p>
<p>代码&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> com.alipay.ipay.gn.commontool;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ch.ethz.ssh2.Connection;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ch.ethz.ssh2.Session;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ch.ethz.ssh2.StreamGobbler;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.alipay.ipay.gn.commontool.file.ZgxFileUtil;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.commons.lang3.tuple.Pair;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.log4j.Logger;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.BufferedReader;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.IOException;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.InputStream;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.InputStreamReader;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.math.BigDecimal;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.ArrayList;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.List;


</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)">
* </span><span style="color: rgba(128, 128, 128, 1)">@version</span><span style="color: rgba(0, 128, 0, 1)"> 1.0
* @time 2019/7/15 20:28
* &lt;p&gt;
* 类功能说明:
* 1、连接服务器
* 2、执行Linux日志查询命令,返回查询后的日志字符串(以行为单位)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> LogAuto {
    </span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> Logger log;
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Session ssh;
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String hostName;
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String userName;
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String password;
    </span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> port;

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 连接服务器
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> hostname 服务器IP
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> port   端口
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> username 账号
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> password 密码
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> LogAuto(String hostname, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> port, String username, String password) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.hostName =<span style="color: rgba(0, 0, 0, 1)"> hostname;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.port =<span style="color: rgba(0, 0, 0, 1)"> port;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.userName =<span style="color: rgba(0, 0, 0, 1)"> username;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.password =<span style="color: rgba(0, 0, 0, 1)"> password;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.log = ZgxLoggerUtil.getLoger(LogAuto.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 通过Linux命令查询日志内容
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> command Linux日志查询命令
   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回根据命令查出的日志内容
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)"> execCom(String command) {
      Connection conn </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Connection(<span style="color: rgba(0, 0, 255, 1)">this</span>.hostName, <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.port);
      createConnection(conn);
      List</span>&lt;String&gt; logContent = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)">();
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            ssh.execCommand(command);
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将Terminal屏幕上的文字全部打印出来</span>
      InputStream is = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StreamGobbler(ssh.getStdout());
      BufferedReader brs </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> BufferedReader(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InputStreamReader(is));
      </span><span style="color: rgba(0, 0, 255, 1)">while</span> (<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">) {
            String line </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                line </span>=<span style="color: rgba(0, 0, 0, 1)"> brs.readLine();
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
                e.printStackTrace();
            }
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (line == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
            }
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">            System.out.println(line);</span>
<span style="color: rgba(0, 0, 0, 1)">            logContent.add(line);
      }

      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> logContent;
    }

    </span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> createConnection(Connection connection) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建连接</span>
      <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            connection.connect();
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
      }
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            connection.authenticateWithPassword(</span><span style="color: rgba(0, 0, 255, 1)">this</span>.userName, <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.password);
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建与服务器的会话节点</span>
      <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            setSsh(connection.openSession());
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
      }
    }

    </span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setSsh(Session ssh) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.ssh =<span style="color: rgba(0, 0, 0, 1)"> ssh;
    }

    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Session getSsh() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ssh;
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 功能:获取指定服务器在当前时间的内存使用率
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> logAuto
   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回使用率(百分比)
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> getMemoryRate(LogAuto logAuto) {
      String shell </span>= String.format("%s", "free"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 多个命令用“;”隔开</span>
      List&lt;String&gt; listResult =<span style="color: rgba(0, 0, 0, 1)"> logAuto.execCom(shell);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打印shell命令执行后的结果</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; listResult.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            System.out.println(listResult.get(i));
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 提取内存数据(第二行)</span>
      List&lt;String&gt; mem = ZgxStringUtil.splitString(listResult.get(1), " "<span style="color: rgba(0, 0, 0, 1)">);
      Integer usedMemory </span>= Integer.valueOf(mem.get(2<span style="color: rgba(0, 0, 0, 1)">));
      Integer allMemory </span>= Integer.valueOf(mem.get(1<span style="color: rgba(0, 0, 0, 1)">));
      log.info(String.format(</span>"usedMemory=%s;allMemory=%s"<span style="color: rgba(0, 0, 0, 1)">, usedMemory, allMemory));

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 计算内存使用率(已使用内存/总内存)</span>
      <span style="color: rgba(0, 0, 255, 1)">double</span> f1 = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal((<span style="color: rgba(0, 0, 255, 1)">float</span>) usedMemory / allMemory).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100<span style="color: rgba(0, 0, 0, 1)">;
      log.info(String.format(</span>"内存使用率=%s%s", f1, "%"<span style="color: rgba(0, 0, 0, 1)">));
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> f1;
    }

    </span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> Pair getCpuData(LogAuto logAuto) {
      String shell </span>= String.format("%s", "cat /proc/stat"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 多个命令用“;”隔开</span>
      List&lt;String&gt; listResult =<span style="color: rgba(0, 0, 0, 1)"> logAuto.execCom(shell);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打印shell命令执行后的结果</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; listResult.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            System.out.println(listResult.get(i));
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 提取CPU数据(第一行)</span>
      List&lt;String&gt; mem = ZgxStringUtil.splitString(listResult.get(0), " "<span style="color: rgba(0, 0, 0, 1)">);
      mem.remove(</span>0<span style="color: rgba(0, 0, 0, 1)">);
      Long allTime1 </span>= 0L<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; mem.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            allTime1 </span>+=<span style="color: rgba(0, 0, 0, 1)"> Long.valueOf(mem.get(i));
      }
      System.out.println(String.format(</span>"CPU使用总时间=%s;idle=%s", allTime1, mem.get(3<span style="color: rgba(0, 0, 0, 1)">)));

      </span><span style="color: rgba(0, 0, 255, 1)">return</span> Pair.of(allTime1, mem.get(3<span style="color: rgba(0, 0, 0, 1)">));
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 功能:获取指定服务器在当前时间的CPU使用率
   *
   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> logAuto
   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回使用率(百分比)
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> getCpuRate(LogAuto logAuto) {
      Pair cpuData1 </span>=<span style="color: rgba(0, 0, 0, 1)"> getCpuData(logAuto);
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            Thread.sleep(</span>500<span style="color: rgba(0, 0, 0, 1)">);
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (InterruptedException e) {
            e.printStackTrace();
      }
      Pair cpuData2 </span>=<span style="color: rgba(0, 0, 0, 1)"> getCpuData(logAuto);

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> step1 计算两次的cpu总时间</span>
      Long allTime = Long.valueOf(cpuData2.getLeft().toString()) -<span style="color: rgba(0, 0, 0, 1)"> Long.valueOf(cpuData1.getLeft().toString());
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> step2 计算两次的cpu剩余时间</span>
      Long idle = Long.valueOf(cpuData2.getRight().toString()) -<span style="color: rgba(0, 0, 0, 1)"> Long.valueOf(cpuData1.getRight().toString());
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> step3 计算两次的cpu使用时间</span>
      Long used = allTime -<span style="color: rgba(0, 0, 0, 1)"> idle;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> step4 计算cpu使用率(cpu使用率 = 使用时间 / 总时间 * 100%)</span>
      <span style="color: rgba(0, 0, 255, 1)">double</span> f1 = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal((<span style="color: rgba(0, 0, 255, 1)">float</span>) used / allTime).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100<span style="color: rgba(0, 0, 0, 1)">;
      log.info(String.format(</span>"CPU使用率=%s%s", f1, "%"<span style="color: rgba(0, 0, 0, 1)">));

      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> f1;
    }

    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> main(String[] args) {
      LogAuto logAuto </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> LogAuto("服务器IP", 端口号, "账号", "密码"<span style="color: rgba(0, 0, 0, 1)">);
      getMemoryRate(logAuto);
      getCpuRate(logAuto);

      String[] header </span>= {"时间,CPU使用率,内存使用率"<span style="color: rgba(0, 0, 0, 1)">};
      List</span>&lt;String[]&gt; content = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 每分钟获取一次服务器CPU、内存使用率(获取30次)</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; 30; i++<span style="color: rgba(0, 0, 0, 1)">) {
            String[] data </span>= {ZgxDateUtil.getNowDate("yyyy-MM-dd HH:mm:ss"<span style="color: rgba(0, 0, 0, 1)">)
                  , String.valueOf(getCpuRate(logAuto))
                  , String.valueOf(getMemoryRate(logAuto))};
            content.add(data);
            ZgxFileUtil.writeCsv(</span>"服务器性能数据.csv"<span style="color: rgba(0, 0, 0, 1)">, header, content);
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                Thread.sleep(</span>1000 * 60<span style="color: rgba(0, 0, 0, 1)">);
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (InterruptedException e) {
                e.printStackTrace();
            }
      }
    }
}</span></pre>
</div>

</div>
<div id="MySignature" role="contentinfo">
    <div style="color: red"> 如果忍耐算是坚强 我选择抵抗 如果妥协算是努力 我选择争取 </div><br><br>
来源:https://www.cnblogs.com/danhuai/p/12222208.html
頁: [1]
查看完整版本: 【Java】+获取Linux服务器的CPU、内存使用率