動かざることバグの如し

近づきたいよ 君の理想に

CentOSでcan't create Thread: Resource temporarily unavailable対策

参考リンク

環境

  • CentOS6

ある日いきなりSSH接続ができなくなった

ログ見ると「ThreadError: can't create Thread: Resource temporarily unavailable」。どうもスレッド数が制限数の上限に達してしまったらしい

現在のスレッド数

ps aux -L|wc
    602    9807  123207

上の例だと602

スレッド数の上限確認

# ulimit -u
1024

少ねえ

変更

/etc/security/limits.d/90-nproc.confを書き換える

デフォルト

# cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024
root       soft    nproc     unlimited

修正後

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

* soft nproc 38512
* hard nproc 38512

メインデスクトップPCのOSをUbuntuに変更した

今までWindows使ってきたけどアップデート面倒だしってことでなんとなく変えた

変更先

まだBeta版だが実質候補版?の立ち位置 いまのところバグっぽいバグには遭遇していない

すごかったのが特にローカライズされてないバージョン入れたのに日本語化されてるしMozcも最初からインストールされていた点 最近のUbuntuすごいね(こなみ

インストールしたもの

sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get update
sudo apt-get install atom
  • Gparted

買ったばかりのNexus5XにカスタムROMを焼くまで

中古でNexus5Xが16,000円と結構安く買えたので早速弄ってみた。

用意するもの

  • 起動できるNexus5X
  • adbが叩けるWindowsPC
  • 文鎮化しても泣かない心

流れ

  • ブートローダーアンロック
  • Data領域の暗号化解除
  • 純正のimg焼いて8.1にアップデート
  • TWRPのインストール
  • 好みのカスタムROMを焼く

以下記録

ブートローダーアンロック

設定より「ビルド番号」を連打してデベロッパーモードになる。で開発者向けオプションより「OEMロック解除」をON

ちなみに解除して再起動した時点で全データがぶっ飛ぶので注意

Data領域の暗号化解除

もしかしたらこの作業はいらないかも?

ボリュームキーのマイナスを押しながら電源を入れるとブートローダー画面に入れる。

その状態で端末をPCにつないで以下実行

fastboot format userdata

これでdata領域は抹殺される

純正のimg焼いて8.1にアップデート

元々入手したAndroidがなぜか6のままで古かったのでいったん新しいのにアップデート

ココから「8.1.0 (OPM3.171019.016, Mar 2018)」をダウンロード(より最新のがあればそれをダウンロード)

解凍してflash-all.batを実行

再起動すると8.1にアップデートされているはず

TWRPのインストール

先にPC側にADBをインストールしておいて、 adb devices で認識できるようにしておく

ココから最新のTWRPをダウンロードしてimgを焼く 端末を再度ブートローダー画面にした状態でPCにつないで

fastboot flash recovery ~~.img

でインストールできる

カスタムROMのインストール

ここまでくればゴールしたも同然

XDAのスレ一覧から好みのカスタムROMをダウンロードしてTWRP経由で焼く 終わり

Google Text To Speech APIをcurlで実行してみる

Mac or Linux環境で動く

必要なもの

コード

#!/bin/bash

text="$TEXT"

curl -H "Content-Type: application/json" --data "{
  'input':{
    'text':\"$text\"
  },
  'voice':{
    'languageCode':'ja-JP',
    'name':'ja-JP-Standard-A',
    'ssmlGender':'FEMALE'
  },
  'audioConfig':{
    'audioEncoding':'mp3'
  }
}" "https://texttospeech.googleapis.com/v1beta1/text:synthesize?key=$GOOGLE_API_KEY" |
  jq .audioContent -r | base64 --decode |
  mpg123 -

実行

GOOGLE_API_KEY=さっきのキー TEXT=こんにちは ./tts.sh

GCPのインスタンスを生成するコマンド

コード

PROJECT=myproject
NAME=db01
TYPE=g1-small
DISK_SIZE=10GB
ZONE=asia-east1-a

gcloud compute --project $PROJECT \
instances create $NAME \
  --zone $ZONE \
  --machine-type $TYPE \
  --tags http-server,https-server,trains \
  --image-family ubuntu-1604-lts \
  --image-project ubuntu-os-cloud \
  --boot-disk-size $DISK_SIZE \
  --boot-disk-type pd-standard \
  --boot-disk-auto-delete \
  --boot-disk-device-name $NAME-disk \
  --metadata=sshKeys="user:$(cat /Users/thr3a/.ssh/id_rsa.pub)"
  • PROJECT プロジェクト名
  • NAME インスタンス名 任意だが重複不可
  • TYPE インスタンスタイプ
  • DISK_SIZE ディスクサイズ GB単位
  • ZONE リージョン

その他のオプション

  • boot-disk-auto-delete インスタンス削除時にディスクも自動で削除する
  • metadata=sshKeys SSH認証鍵を設定したい場合
$ ./gcp.sh 
WARNING: You have selected a disk size of under [200GB]. This may result in poor I/O performance. For more information, see: https://developers.google.com/compute/docs/disks#performance.

Created [https://www.googleapis.com/compute/v1/projects/myproject/zones/asia-east1-a/instances/db01].
NAME  ZONE          MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
db01  asia-east1-a  g1-small                   10.240.0.3   xxxxxxx  RUNNING