让我们建立一个与电脑将棋软件对弈的服务器<第19部分>

上一篇文章的链接:http://qiita.com/muzudho1/items/6d7accac76f947d9ce58。

作ったプログラムを 相方に丸投げしたいので、マニュアルを書く必要があるんだが、どう書けばいいのか。

外側から触れる順に並べてみよう。

名称場所(1)窓口/var/www/html/tamesi26a5.php(2)セマフォ起こし/home/★user/★project/expect_service/tamesi37a1.expect(3)セマフォ/home/★user/★project/cpp_service/t37a1.d/tamesi37a1.exe(4)浮かむ瀬(チャイルド4)/home/★user/★project/ukamuse_sdt4_child4/bin/apery.exe

デプロイメントしにくいフォルダー階層だぜ……。まあ、37種類ほどのテストの数をこなしやすい用途のフォルダー階層なんで、本番向きに用意したものではない。

我想在一台服务器上部署这个四件套,但可能还需要一些库和其他环境。

    • ERLANG

 

    • RabbitMQ 3.6.6

 

    • php-amqplib/php-amqplib 2.5.*

 

    • Composer

curl
bcmath

libev-dev
Expect 5.45-7
PHP 7.0
Apache 2.4.18

啊,还有很多呢……以后再整理吧。我也希望能够方便地安装这些。你说要将其脚本化?也就是交给别人吧。只要写写说明书就可以了……。

启动方式

    • インストール方法

 

    • バージョン確認方法

 

    • 起動方法

 

    起動していることを確認する方法

有人在那里。 (You can also say “有个人在那里。”)

設定方法

    • Apache と PHP をつなげるとこだけが難しい。自動化されてない。

 

    • メッセージ・キュー名がハードコーディングされている。増やしたいときどうするのか。

 

    URLもハードコーディングされている。増やしたいときどうするのか。

コンパイル方法

    コンパイルなんかするのか。もっと汎用的なプログラムにした方がいいんじゃないのか?

原本默认已经包含了这个前提。

    • apt

 

    • g++

 

    • mono 4.2.1

 

    • nano

 

    • grep

 

    • make

 

    wget

これはキリがない。

消すもの

    PHP 5

そういえば、設定の煩雑さに ぶち切れて、PHP 5 とかいうものを OS から跡形も残さず抹消したんだった。

Ubuntu的更新

Ubuntu を 16.04、または最新版に更新します。

do-release-upgrade

開発者じゃないんだったら、g++ は要らないか。

make コマンドは多分、最初から入ってるだろう。インストールに使えるかもしれない。

浮かむ瀬(チャイルド4)は、デバッグ版じゃなくて リリース版を渡すように注意だな。

需要一个定距文件和一个评价值文件。

./apery bench

で、浮かむ瀬が 動いてるかどうか確認できることも マニュアルに書いておこう……、あっ! チャイルド4 では動かないや……。

美国国际学生组织

setoption name Minimum_Thinking_Time value 500

如果想将思考时间延长到0.5秒,需要在启动时进行设置。如果想在中途进行更改,则可以通过重新启动程序或者从源代码级别进行修改。

我没有使用bash。

開発者じゃなければ mono も要らないか。

さくらVPS では var/www/html がWebページのデフォルト階層。

やって当たり前かと思っていたんだが、
PHP のエラー表示対応とか、日本語対応とか、まったくしなくていいな……。
出てくるのは bestmove 2g2f とかなんで……。
日本語が欲しいのはエラーが出たときだけか。

mbstring.internal_encoding = UTF-8

你是否希望支持UTF-8编码?

安装PHP7。

apt-get -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring

安装php后将自动安装php7。安装php7后需要重新启动Apache服务器。

sudo /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.

RabbitMQ のインストール

以后可以参考自己写的文章。

安装 apt

RabbitMQ.Client.dll などをインストールするためのインストーラー。

apt install apt-file
apt-file update

安装用于客户端的 RabbitMQ。

apt-file search RabbitMQ.Client.dll

ただ、RabbitMQ.Client.dll は Windows / C# 用だろう。System.Messaging とか、本番で使うだろうか?

下载Erlang (阿兰)

或者,您是想整个传递压缩文件?
但是这是为 C# 和 System.Messaging 设计的吧。您是打算在生产环境中使用吗?

NuGet の使い方

これも本番の運用中では使わないんじゃないか?
C# 用 System.Messaging 用だろ。

Ubuntu での RabbitMQ のグレードアップの仕方

これは必要。

sudo apt-get update
sudo apt-get install rabbitmq-server
gpg --keyserver pgpkeys.mit.edu --recv-key 7638D0442B90D010
gpg -a --export 7638D0442B90D010 | sudo apt-key add -
wget -O- https://packages.erlang-solutions.com/debian/erlang_solutions.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install init-system-helpers socat esl-erlang
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install rabbitmq-server

启动RabbitMQ服务器

rabbitmq-server

请按下[Ctrl]+[Z]以停止。

bg 1

1是工作号码。

假设。

Composer を入れたい

由于这是为了创建PHP环境,所以请前往 /var/www/html 目录进行操作。

需要安装 PHP7,因为它需要使用 curl。

sudo apt-get install php-curl
sudo service apache2 restart
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

确认安装。

ls -an

创建了一个名为composer的隐藏文件,然后按照以下命令敲击。

composer

composer をインストールできていれば、PHPファイルを置きたいフォルダーに、composer.json ファイルを自分で作る。

nano composer.json

composer.json -> composer配置文件

{
  "require": {
      "php-amqplib/php-amqplib": "2.6.*"
  }
}

在存在 composer.json 的地方

copmoser update

敲。还是不行吗?

安装 bcmath。

sudo apt install php7.0-bcmath
※パスワード入力
composer update

安装是先进行的吗?

composer install

重新启动Apache。

sudo service apache2 restart

重新检查自己的文章。
http://qiita.com/muzudho1/items/3ff3e8dfde0ff5bed203#_reference-96aadf48e98efd0298c7

我没有使用cron。

查看自己的文章。
http://qiita.com/muzudho1/items/3ca7bade03f7c2fd8292#_reference-3e659d58af3dcf8582f4

期望安装5.45-7版本的应用程序。

apt-get -y install expect

既に入っているかも。

自分の記事を見直す。
http://qiita.com/muzudho1/items/8f940f8b4c679c23a174#_reference-a78ee16b0c896c7d47ce

AMQP-CPP的意思是高级消息队列协议的C++实现。

「AMQP-CPP」(CopernicaMarketingSoftware/AMQP-CPP)是一个开源的C++库,用于处理AMQP(高级消息队列协议)的通信。该库提供了用于建立、发送和接收消息的函数和类,使开发者能够轻松地集成AMQP协议到他们的应用程序中。完整的源代码和文档可以在GitHub上找到,地址为https://github.com/CopernicaMarketingSoftware/AMQP-CPP。

需要下载并安装吗?

# make
# make install
# make pure

安装libev-dev

sudo apt-get update
sudo apt-get install libev-dev

重新审视自己的文章。
http://qiita.com/muzudho1/items/1432040086218e14ebe2#_reference-a80ce71e0ed6ad5c0197

自分の記事を見直す。
http://qiita.com/muzudho1/items/798dfbf267340f3801e1#_reference-1a747e743b7ff0dbb050

自分の記事を見直す。
http://qiita.com/muzudho1/items/6fbe1681a7e14dcac3f2#_reference-d57789b2016536e29156

查看自己的文章。

重新查看自己的文章。

自分の記事を見直す。
http://qiita.com/muzudho1/items/90eec636fc1664dbfcee#_reference-99a929aad0b8a250b719

ニコ動の動画が見れなかったのでクロームのキャッシュをクリアーしたからか、Qiitaへの投稿が 400番台エラーになって無駄になった。
まあいいか。

让我们将文件夹结构改为正式版本。

最好把它们整理到一个目录中吧。 (Zuì bǎ ba.)

メモ書き

開発中ネームを適当にきめる。

    shogi

    あんまりなので shogi1s にするか。(1秒未満の指し手→shogi 1 second)
    sasite1s の方がいいか?

    /var/www/html/sasite1s/
        |
        +--- ukamuse_sdt4_child5.php
                 # これにアクセスすると、bestmove 2g2f などを返す

    /usr/games/sasite1s/
        |
        +--- ukamuse_sdt4_sasite1s/
                |
                +--- reservation.expect
                |
                +--- reservation.exe
                |
                +--- bin
                        |
                        +--- apery
                        |
                        +--- apery.out.log
                        |
                        +--- apery.err.log
                        |
                        +--- 20161007
                                |
                                +--- KKP_synthesized.bin
                                |
                                +--- KK_synthesized.bin
                                |
                                +--- KPP_synthesized.bin

    メッセージキュー
        "To_UkamuseSdt4_Sasite1s"    →浮かむ瀬SDT4(sasite1s用)
        "From_UkamuseSdt4_Sasite1s"  ←浮かむ瀬SDT4(sasite1s用)

    パッケージ
        |
        |                           # Webアプリケーション
        +--- Apache 2.4.18
        |       |
        |       +--- curl ------+
        |       |               |
        |       +--- bcmath ----+
        |                       |
        |                       +--- Composer
        |                               |
        |                               +--- PHP 7.0
        |
        |
        |                           # 外部プロセス操作
        +--- Expect 5.45-7
        |
        |
        |                           # プロセス間通信
        +--- libev-dev
                |
                +--- ERLANG 19.3
                        |
                        +--- RabbitMQ 3.6.6
                        |
                        +--- php-amqplib/php-amqplib 2.5.*

だいぶ 詰めてきたか?

    プロセス
        |
        +--- RabbitMQ Server
        |
        +--- ./apery

とりあえずリネームしよう。

変更前変更後窓口/var/www/html/tamesi26a5.php/var/www/html/sasite1s/ukamuse_sdt4_sasite1s.phpセマフォ起こし/home/★user/★project/expect_service/tamesi37a1.expect/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expectセマフォ/home/★user/★project/cpp_service/t37a1.d/tamesi37a1.exe/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.exe浮かむ瀬(チャイルド4)/home/★user/★project/ukamuse_sdt4_child4/bin/apery.exe/usr/games/sasite1s/ukamuse_sdt4_sasite1s/binapery

是否应该将源代码分发到生产环境中呢?

把代码放在Git Hub或Bit Bucket上是个好主意。
不太清楚是否应该将源代码放在生产环境中。难以确定最佳做法。

等等

我可以把配置文件放在etc目录下吗?如果可以的话,我会使用它。

    設定ファイル
    /
    |
    +--- etc/sasite1s.d/
            |
            +--- IpAddress.txt
                     # (2017-03-23 Comment)要らないのでは。

这样真的可以吗?

(2017-03-23评论)我并没有硬编码IP地址之类的东西。这不是必要的吗?

将文件夹权限设为可写,移动文件。

将下一个可执行文件的权限更改为可执行。

    • reservation.expect

 

    • reservation.exe

 

    bin/apery

在保存源代码时,请确保使用带有 UTF-8 BOM 的编码方式,通过文本编辑器进行操作。

如果有问题的话,改行也想要替换成适用于Linux的,但不一定要做。

启动改造版的浮游车载系统。

./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &

不需要提供RabbitMQ的启动方法。

哎呀?无法执行了。

# ./apery
Killed
-rwxr-xr-x 1 ★user ★user 1601896 Mar 22 23:43 apery

我们要不要检查一下容量呢?

测试环境

# ls -l
total 1576
drwxr-xr-x 2 root root    4096 Mar 12 07:09 20161007
-rwxr-xr-x 1 root root 1601896 Mar 21 02:33 apery
-rw-r--r-- 1 root root       0 Mar 21 04:17 apery.err.log
-rw-r--r-- 1 root root       0 Mar 21 04:17 apery.out.log
-rw-r--r-- 1 root root    1531 Mar 12 05:48 benchmark.sfen

Benchmark.sfen是否是必备品?

正式环境

# ls -l
total 1576
drwxrwxr-x 2 ★user ★user    4096 Mar 22 23:43 20161007
-rwxr-xr-x 1 ★user ★user 1601896 Mar 22 23:43 apery
-rw-r--r-- 1 root  root        0 Mar 23 00:43 apery.err.log
-rw-r--r-- 1 root  root        0 Mar 23 00:43 apery.out.log
-rw-rw-r-- 1 ★user ★user    1539 Mar 23 00:48 benchmark.sfen

容量不一样。换行有问题吗?

测试环境

# ls -l
total 837616
-rw-rw-r-- 1 ★user ★user  81251424 Mar 22 23:44 KKP_synthesized.bin
-rw-rw-r-- 1 ★user ★user     52488 Mar 22 23:43 KK_synthesized.bin
-rw-rw-r-- 1 ★user ★user 776402496 Mar 22 23:46 KPP_synthesized.bin

实际环境

root@tk2-217-18401:/usr/games/sasite1s/ukamuse_sdt4_sasite1s/bin/20161007# ls -l
total 837616
-rw-rw-r-- 1 ★user ★user  81251424 Mar 22 23:44 KKP_synthesized.bin
-rw-rw-r-- 1 ★user ★user     52488 Mar 22 23:43 KK_synthesized.bin
-rw-rw-r-- 1 ★user ★user 776402496 Mar 22 23:46 KPP_synthesized.bin

評價值文件似乎沒有變化。

# ps aux | grep apery
root     19584  0.3 48.1 1613836 489540 ?      Sl   Mar21  10:33 ./apery --enqueue 1113 durable --dequeue 1112 durable autodelete
root     30305  0.0  0.0  12936   984 pts/1    S+   01:17   0:00 grep --color=auto apery

测试环境上能否启动第二个?

# ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &
[1] 30327
# jobs
[1]+  Killed                  ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null

好像无法使用这个参数启动。

# ./apery --enqueue 1115 durable --dequeue 1114 durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &
[1] 30362
# jobs
[1]+  Killed                  ./apery --enqueue 1115 durable --dequeue 1114 durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null

为什么不能启动呢?或者为什么会立即崩溃呢?

因为本地主机的端口号5672连接了测试环境吗?
但是,我们会为发送和接收分别建立多个连接。
同时,在一个端口上打开多个通道也是常见的用法。

什么情况下会发生「Killed」?

top
top - 01:41:18 up 18 days,  4:23,  1 user,  load average: 0.05, 0.10, 0.08
Tasks: 104 total,   2 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.2 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem :  1017748 total,    94708 free,   756804 used,   166236 buff/cache
KiB Swap:  1046524 total,    38520 free,  1008004 used.   103964 avail Mem
 8169 rabbitmq  20   0 2704848  26396   1744 S   0.7  2.6  18:59.95 beam.smp
13211 www-data  20   0  352576  10096   4300 S   0.7  1.0   0:00.22 apache2
30710 root      20   0   40516   1988   1380 R   0.7  0.2   0:01.45 top
19584 root      20   0 1613836 489660   1180 S   0.3 48.1  10:39.92 apery
28688 root      20   0       0      0      0 S   0.3  0.0   0:01.26 kworker/0:2
    1 root      20   0   37560   2468   1312 S   0.0  0.2   3:46.25 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.60 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:27.75 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S   0.0  0.0   4:41.36 rcu_sched
    8 root      20   0       0      0      0 S   0.0  0.0   6:10.87 rcuos/0
    9 root      20   0       0      0      0 S   0.0  0.0   0:48.06 rcuos/1

猴猴(Apery)是否使用了大约48%的内存呢?

Apery 的 USI_Hash 默认为 256MB,最大可达 1024 * 1024 MegaByte,即 1 Tera Byte。

如果这个比例是48%,那么内存大约有2Tera Byte吗?

KiB Swap:  1046524

看到这个表达,可以认为发生了大约1 GB的交换吗?

USI_Hash

将其从256减少到64会怎么样呢?

 8169 rabbitmq  20   0 2707928  28324   1768 S   0.7  2.8  19:14.44 beam.smp
31262 root      20   0 1482308 148332   2916 S   0.3 14.6   0:01.73 apery
31374 root      20   0   40516   1992   1380 R   0.3  0.2   0:00.02 top
    1 root      20   0   37560   2468   1312 S   0.0  0.2   3:46.56 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.60 kthreadd

再启动后大约有14.6%。如果开始考虑这个问题,会增加大约34.5%左右,大约是三分之一的增长率。

31262 root      20   0 1482472 659364   1700 S   1.0 64.8   0:07.06 apery
 8169 rabbitmq  20   0 2705360  25784   1620 S   0.7  2.5  19:20.15 beam.smp
  714 memcache  20   0  378776  12004      0 S   0.3  1.2   5:31.89 memcached
  715 mysql     20   0 1302112    524      0 S   0.3  0.1  38:47.58 mysqld
11959 root      20   0  351884   8324   8048 S   0.3  0.8   3:51.47 apache2
31623 root      20   0   40516   1992   1384 R   0.3  0.2   0:00.03 top
    1 root      20   0   37560   1164    580 S   0.0  0.1   3:46.70 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.60 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:27.78 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H

USI_Hash 被设定为 128,但奇怪的是内存却增加到了 64.8%。

启动测试环境的备忘录

不断进行更新导致内容过时,但还是写下现在的内容。

────────────────────────────────────────

    二重起動防止
    ============

        # ps aux | grep apery
            # プロセスがいくつ起動しているか確認できる

        # ps aux | grep php
            # 競合するサンプル・プログラムが走ってなければOK。

    浮かむ瀬(テスト用)の起動<その1>
    ====================================

        # cd /home/★user/shogi/ukamuse_sdt4_child4/bin

        # ./apery --enqueue 1113 durable --dequeue 1112 durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &

    浮かむ瀬(テスト用)の起動<その1>の確認
    ==========================================

        # jobs
        [1]+  Running                 ./apery --enqueue 1113 durable --dequeue 1112 durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &

        ※起動後、30秒ぐらい経ってから次のステップを始めた方が usiコマンドの応答が正常に返ってくるようだ。(原因不明、状況不明)

    浮かむ瀬(テスト用)の起動<その2>
    ====================================

        # /home/★user/shogi/csharp_service/tamesi34_cs.exe 2> /home/★user/shogi/csharp_service/tamesi34_cs.err.log

            Delete ? >
                        [Enter] ※何も入力せず [Enter]キーだけ押す。

            Enqueue ? >
                        1112
            Enqueue ? >
                        3
            Dequeue ? >
                        1113
            Dequeue ? >
                        1
            Enqueue? >
                        usi

                                ※数秒して、次のような応答が返ってくればok(一例)
                            <-------- [interrupt!] Dequeue(^q^) id name ukamuse_SDT4
                            id author Hiraoka Takuya

                            option name Best_Book_Move type check default false
                            option name Book_File type string default book/20150503/book.bin
                            option name Byoyomi_Margin type spin default 500 min 0 max 2147483647
                            option name Clear_Hash type button
                            option name Draw_Ply type spin default 256 min 1 max 2147483647
                            option name Engine_Name type string default ukamuse_SDT4
                            option name Max_Book_Ply type spin default 32767 min 0 max 32767
                            option name Max_Random_Score_Diff type spin default 0 min 0 max 32600
                            option name Max_Random_Score_Diff_Ply type spin default 32767 min 0 max 32767
                            option name Min_Book_Ply type spin default 32767 min 0 max 32767
                            option name Min_Book_Score type spin default -180 min -32601 max 32601
                            option name Minimum_Thinking_Time type spin default 20 min 0 max 2147483647
                            option name Move_Overhead type spin default 30 min 0 max 5000
                            option name MultiPV type spin default 1 min 1 max 594
                            option name OwnBook type check default true
                            option name Slow_Mover type spin default 89 min 1 max 1000
                            option name Slow_Mover_10 type spin default 10 min 1 max 1000
                            option name Slow_Mover_16 type spin default 20 min 1 max 1000
                            option name Slow_Mover_20 type spin default 40 min 1 max 1000
                            option name Threads type spin default 2 min 1 max 256
                            option name Time_Margin type spin default 4500 min 0 max 2147483647
                            option name USI_Hash type spin default 256 min 1 max 1048576
                            option name USI_Ponder type check default true
                            usiok

                                ※usiokの応答が返ってこなければ、動いていない。(原因不明、状況不明)
                                ※aperyのジョブをkillし、起動からやり直すこと。

                                ※プロンプトはでないので、usiokを目印に続けて打ち込む。

                        setoption name USI_Hash value 128
                                ※ ハッシュサイズ
                                ※ デフォルトで 256 だが、サーバーのメモリの 48% を使ってしまって 2台起動できない。
                                ※ そこで半分の 128 にしてみよう。

                                ※ 応答はない

            Enqueue? >
                        isready
                                ※3.6秒ほどかかる
                                ※10秒経っても反応がなければ、起動中に失敗か?
                            readyok

        エラーログの確認
        ================

            # nano /home/★user/shogi/ukamuse_sdt4_child4/bin/apery.err.log
            # nano /home/★user/shogi/csharp_service/tamesi34_cs.err.log

────────────────────────────────────────
 8169 rabbitmq  20   0 2705872  16588   1504 S   1.0  1.6  19:41.75 beam.smp
32006 root      20   0 1875684 801608   1680 R   0.7 78.8   0:11.87 apery
    1 root      20   0   37560    976    448 S   0.0  0.1   3:47.19 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.61 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:27.82 ksoftirqd/0

当将USI_Hash设置为512时,仅增加了78.8%。

 8169 rabbitmq  20   0 2706896   6856   1468 S   1.7  0.7  19:43.25 beam.smp
32644 root      20   0 1416932 553580   1664 S   0.7 54.4   0:02.40 apery
11959 root      20   0  351884      8      0 S   0.3  0.0   3:52.00 apache2
    1 root      20   0   37560   1048    564 S   0.0  0.1   3:47.21 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.61 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:27.82 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S   0.0  0.0   4:43.54 rcu_sched
    8 root      20   0       0      0      0 S   0.0  0.0   6:13.31 rcuos/0

即使将 USI_Hash 设置为 64 MB,它仍会占用 54.4% 的内存吗?

 8169 rabbitmq  20   0 2706384  16576   1460 S   0.7  1.6  19:45.29 beam.smp
  310 root      20   0   40516   1992   1384 R   0.3  0.2   0:00.03 top
32732 root      20   0 1384164 591988   1736 S   0.3 58.2   0:02.45 apery
    1 root      20   0   37560   1056    584 S   0.0  0.1   3:47.27 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.61 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:27.82 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S   0.0  0.0   4:43.66 rcu_sched
    8 root      20   0       0      0      0 S   0.0  0.0   6:13.40 rcuos/0
    9 root      20   0       0      0      0 S   0.0  0.0   0:48.48 rcuos/1
   10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh

即使将USI_Hash设置为32 MB,也使用了58.2%的内存(/_\)

# jobs
[1]-  Running                 ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &  (wd: /usr/games/sasite1s/ukamuse_sdt4_sasite1s/bin)
[2]+  Killed                  ./apery --enqueue 1113 durable --dequeue 1112 durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null

在测试环境版本中,似乎当第二个实例被启动时会导致它被终止。
真是让人困扰啊。

预订程序

# /usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.exe --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete
コマンドライン引数の「--queue 送信先キュー名 寿命」を漏れなく指定してください。
例: --queue 1113 durable autodelete
寿命は可変個数設定可能「durable」「autodelete」「passive」「exclusive」
name_queue=[]

哎呀,我把命令行参数弄错了。

# /usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.exe --queue To_UkamuseSdt4_Sasite1s durable autodelete
queueName = "To_UkamuseSdt4_Sasite1s"
messages = 0
consumers = 1

写作如下。

预订期望

# /usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect --queue To_UkamuseSdt4_Sasite1s durable autodelete
/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect: line 1: #!/usr/bin/expect: No such file or directory
/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect: line 2: $'\r': command not found
: No such file or directory_sdt4_sasite1s/reservation.expect: line 3: cd: /usr/games/sasite1s/ukamuse_sdt4_sasite1s
/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect: line 4: $'\r': command not found
/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect: line 6: $'\r': command not found
/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect: line 7: spawn: command not found
/usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect: line 8: $'\r': command not found
": no such file or directorye =
": no such file or directory =
": no such file or directorys =

哎呀,“#!/usr/bin/expect:找不到该文件或目录”
执行方式有所不同吗?

# expect /usr/games/sasite1s/ukamuse_sdt4_sasite1s/reservation.expect --queue To_UkamuseSdt4_Sasite1s durable autodelete

啊,expect 不是一个可执行文件,而是一个命令!

ukamuse_sdt4_sasite1s.php 文件搞错了。

    • × tamesi37a1.php.txt

 

    〇 tamesi26a5.php.txt

由于原始的源代码错误,需要进行修正。

如果不安装composer的话

Warning: require_once(/var/www/html/sasite1s/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/sasite1s/ukamuse_sdt4_sasite1s.php on line 5

Fatal error: require_once(): Failed opening required '/var/www/html/sasite1s/vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/html/sasite1s/ukamuse_sdt4_sasite1s.php on line 5

那么,

cd /var/www/html/sasite1s

前往那个地方,

nano composer.json

敲击并创建文件。

composer.json 的中文释义是”composer的配置文件”。

{
  "require": {
      "php-amqplib/php-amqplib": "2.6.*"
  }
}
# composer install

虽然出现了一种看起来像错误的提示,但加载需要一些时间才会开始,所以请耐心等待大约一分钟左右。

Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing php-amqplib/php-amqplib (v2.6.3) Downloading: 100%
Writing lock file
Generating autoload files
# ls -l
total 20
-rw-r--r-- 1 root  root    65 Mar 23 04:22 composer.json
-rw-r--r-- 1 root  root  3040 Mar 23 04:23 composer.lock
-rw-rw-r-- 1 csg10 csg10 6258 Mar 23 04:19 ukamuse_sdt4_sasite1s.php
drwxr-xr-x 4 root  root  4096 Mar 23 04:23 vendor

如果有一个名为 vendor 的文件夹,则表示可以在 PHP 中使用包了,准备就绪。

从浏览器

http://★サイトアドレス/tamesi26a5.php?sfen%20lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL%20b%20-%201%20moves

在中国访问。屏幕上显示

error = "busy" busy = 1

然而,当查看页面源代码时

error = "busy"
busy = 1

已经换行了。好的。还有一条信息留着。

# rabbitmqctl list_queues
Listing queues ...
1112    1
amq.gen-6X-aAcq9ZPaEA4RZwkLz_A  0
1113    0
To_UkamuseSdt4_Sasite1s 0
From_UkamuseSdt4_Sasite1s       0

1112有1个待处理事项,但To_UkamuseSdt4_Sasite1s一个也没有。
难道是去错了地方?

去看的地方走错了。正确的是

http://★サイトアドレス/sasite1s/ukamuse_sdt4_sasite1s.php?sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves

好。

将嵌入在 ukamuse_sdt4_sasite1s.php 中的所有消息队列名称重新编写。

网址 zhǐ)

有点什么

http://★サイトアドレス/sasite1s/ukamuse_sdt4_sasite1s.php?

这个名字感觉太过小心谨慎了。

http://★サイトアドレス/sasite1s/ukamuse_sdt4.php?

可以这样吗?

顺便说一下,我尝试着执行了一些技巧。

# ./release
usi
id name Gikou 20160606
id author Yosuke Demura
option name BookMaxPly type spin default 50 min 0 max 50
option name ByoyomiMargin type spin default 100 min 0 max 10000
option name DrawScore type spin default 0 min -200 max 200
option name FischerMargin type spin default 12000 min 0 max 60000
option name MinBookScoreForBlack type spin default 0 min -500 max 500
option name MinBookScoreForWhite type spin default -180 min -500 max 500
option name MinThinkingTime type spin default 1000 min 10 max 60000
option name MultiPV type spin default 1 min 1 max 700
option name NarrowBook type check default false
option name OwnBook type check default true
option name SuddenDeathMargin type spin default 60 min 0 max 600
option name Threads type spin default 2 min 1 max 64
option name TinyBook type check default false
usiok
isready
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted

好像出现了 std::bad_alloc 异常。

# ./apery
Killed
# ./apery bench
Killed

这个改版的浮出水面的孩子4可能是因为内存使用的方式太重了吗?

转话题了,接下来是下一篇文章。

广告
将在 10 秒后关闭
bannerAds